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
ServiceImplB.java
インタフェースを介して注入するように変更すれば、次のことができます.
ServiceImpl.java
私はプロジェクトでアプリケーションContextツールクラスを使用してbeanを取得し、インタフェース注入を使用できないのでproxy-target-class="true"に変更するしかありません.
に改心
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"に変更するしかありません.