spring aop 的一个思考

问题:

  spring  aop 默认使用jdk代理织入。

  也就是我们常这样配置: 

  通过aop命名空间的声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面。当然,spring

  在内部依旧采用AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建工作,但具体实现的细节已经被隐藏起来了

  有一个proxy-target-class属性,默认为false,表示使用jdk动态代理织入增强,当配为时,表示使用CGLib动态代理技术织入增强。

疑问:

  平时我们开发的时候会在controller 做切面做操作 记录。 

  @Controller
  @RequestMapping("loginLog")
  public class LoginLogController {。。。。}

  我们的controller 没有实现接口啊。再使用jdk代理好吗?

网友解答:

  即使proxy-target-class设置为false,如果目标类没有声明接口,则spring将自动使用CGLib动态代理

  (不知道这样对不对?????????)

问这个问题的意义:

  我在做数据同步的时候。使用切面的形式  切换数据源。这时候遇到一个问题。就是 mybatis的 mapper 接口切不到。百度后我们使用 CGLib动态代理 ;也就是proxy-target-class=true。 所以修改为 false 。

 

引发了另一个问题: 配置的 位置问题

  http://blog.csdn.net/my_nice_life/article/details/52910718

  http://www.cnblogs.com/hustyangli/archive/2008/09/01/1281319.html

总结: spring很智能。

 

   

你可能感兴趣的:(spring aop 的一个思考)