Spring AOP疑虑

1.SpringMVC环境下,新建一个Service类,以及其实现类,类使用@Transational注解,然后在别的类里@Autowired这个类,使用AopUtils.isAopProxy()判断该类是否被Spring代理,返回的false,这是为什么?理论上带有事务注解,不是应该要被Spring代理的吗?

2.我使用@Aspect注解,自己定义一个切面,并且让某个Service类满足@Pointcut的条件,此时也使用AopUtils.isAopProxy()判断该类是否被Spring代理,此时返回的是true,我再进一步使用 AopUtils.isJdkDynamicProxy判断是否是JDK的代理,返回的是false, AopUtils.isCglibProxy()返回的是true,这是为什么,我的这个类是有对应的接口的,看网上的资料不是说有接口的话就会使用JDK自己的代理吗?

关于问题1的代码如下 一个简单的类:

@Service
@Transactional
public class TestService1{
}

在controller里引用:

@RestController
@RequestMapping
public class LoginController {

    @Autowired
    TestService1 testService1;

     @RequestMapping("/guest")
    public Response<String> guest() {
        AopUtils.isAopProxy(testService1);  //out put false
        return Response.<String>builder().code(200).data("guest!").build();
    }
}

启动项目测试会走到guest方法中,此时打印的是false。 理论上testService1不是被事务注解修饰了,应该输出true吗?

阅读 2.2k
2 个回答

1.代码呢
2.SpringBoot2.0开始默认就是Cglib

新手上路,请多包涵

我开始事务管理后,运行测试类,获取到的service应该如下:

clipboard.png

而按你说的,应该是你自己事务管理没有开启正确,你检查下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题