Autowired spring bean 不是代理

2024-05-13

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

我正在尝试创建表记录,但收到“没有正在进行的事务”。

我已经准备好了所有正确的东西:

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

But,

当我远程调试并检查控制器的 myService 字段时,我看到的是类似的内容 com.some.package.services.MyService@12345 (而不是类似 $Proxy73 的东西)对我来说是不对的,因为应该自动连接的是代理而不是目标 bean (我认为这是什么)。如果我是正确的,那么没有事务是有道理的,因为注释只有在调用代理上用 @Transactional 注释的公共方法时才会启动。

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

Thanks


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

没有创建新的类(就像使用cglib /questions/tagged/cglib)并且没有代理(就像 Spring 中普通的基于接口的 AOP 一样)。而是字节码MyServiceImpl直接修改了,你甚至没有注意到。不幸的是,查看 AOP 的唯一方法是反编译你的类。如果你使用javap -c MyServiceImpl您会发现大量对 Spring 事务层的引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Autowired spring bean 不是代理 的相关文章

随机推荐