自动装配的spring bean不是代理

jak*_*ack 9 service proxy spring target autowired

我正在开发一个连接MySQL数据库的非常小的应用程序.

我正在尝试创建表记录但是"没有正在进行的事务".

我有适当的东西:

  • 服务接口MyService及其实现MyServiceImpl
  • 我用@Service注释了服务impl
  • 在控制器中,我使用字段@Autowired MyService的接口名称
  • 我有正确的事务配置,因为它最初是由roo生成的
  • MyServiceImpl实现了一个公共方法MyService.create(...)

但,

当我远程调试并检查控制器的myService字段时,我看到的是com.some.package.services.MyService@12345(而不是像$ Proxy73这样的东西)对我来说是不对的,因为应该自动装配的是代理不是他的目标豆(我认为这是).如果我是正确的,那么没有事务是有意义的,因为注释只会在调用在代理上使用@Transactional注释的公共方法时启动.

请告诉我为什么spring在这个设置中注入目标bean.

谢谢

Tom*_*icz 8

如果您有启用AspectJ的事务管理(<tx:annotation-driven mode="aspectj" .../>)事务应用程序在同一个类中就地发生,无论是在构建(编译时编织)还是在启动(加载时编织).

没有创建新类(比如使用)和没有代理(比如Spring中基于普通接口的AOP).相反,字节码MyServiceImpl被直接修改,你甚至没有注意到.不幸的是,查看AOP的唯一方法是反编译你的类.如果您使用,javap -c MyServiceImpl您会发现大量对Spring事务层的引用.