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 中删除时,一切正常。
我已经搜索并<aop:aspectj-autoproxy proxy-target-class="true"/>
在 applicationContext.xml 中找到了成功自动装配的地方,并且它有效。我还发现当使用@Transactional 时,spring 使用 JDK 代理。
我有一些困惑,
- @Transactional 如何与代理相关
- 为什么 spring 对实现接口的 bean 使用 JDK 代理。
- 为什么我需要放置
<aop:aspectj-autoproxy proxy-target-class="true"/>
在 applicationContext.xml
谁能解释一下?或向我推荐任何文章或博客