Springプロジェクトに@Transactional注記を追加するとNo SuchBeanDefinitionException異常の解決方法

1491 ワード

プロファイルの中のこの文
 

に改心


Proxy-target-class="true"は、JDKを使用せずにCGLIBクラスエージェントを使用するデフォルトの言い訳エージェントを表します.
理由:beanがJDKの動的エージェントメカニズムによって管理されている場合、エージェントはそのbeanを継承せず、同じインタフェースしか実現しません.従って,beanがインタフェースを介して注入されると,注入に成功する.実際のクラス注入によってSpringはbeanインスタンスをクラスに関連付けることができません.エージェントは本当にクラスに継承されていないからです.このような理由は、Springのものを使用しているため、beanに注釈@Transactionalを使用している可能性が高い.以下のように、ServiceAはServiceBに注入され、この2つのサービスはすべて物事を使用しており、クラス注入beanを実現することで役に立たない.IService.javaに変化がないことを言い訳にして、実はクラスに物事の注釈を加えてServiceImpla.java
package com.csdn.training.service;

@Service
@Transactional
public class ServiceImplA implements IService {
    @Autowired
    private ServiceImplB serviceImplB;
}

ServiceImplB.java
package com.csdn.training.service;

@Service
@Transactional
public class ServiceImplB implements IService {

}

インタフェースを介して注入するように変更すれば、次のことができます.
ServiceImpl.java
package com.csdn.training.service;

@Service
@Transactional
public class ServiceImplA implements IService {
    @Autowired
    @Qualifier("serviceImplB")
    private IService serviceImplB;
}

私はプロジェクトでアプリケーションContextツールクラスを使用してbeanを取得し、インタフェース注入を使用できないのでproxy-target-class="true"に変更するしかありません.