public interface Service {
public void doSomething();
}
@Service
public class MyService implements service{
@Transactional
public void doSomething(){
}
}
@Controller
public class MyController {
@Autowired
private MyService service;
}
上記のシナリオでは、自動配線は例外 " illegalArgumentException : argument type mismatch
" で失敗します。implements service
MyService から削除すると、すべて正常に動作します。
自動配線を成功させるためにapplicationContext.xmlでその場所を検索して見つけましたが<aop:aspectj-autoproxy proxy-target-class="true"/>
、うまくいきました。@Transactional を使用すると、Spring が JDK プロキシを使用することもわかりました。
戸惑いもありますが、
- @Transactional とプロキシの関係
- spring がインターフェイスを実装する Bean に JDK Proxy を使用する理由。
<aop:aspectj-autoproxy proxy-target-class="true"/>
applicationContext.xmlに配置する必要がある理由
誰でも説明できますか?または記事やブログを参照してください