@EnableAspectJAutoProxy注解标签

前言:

  为什么在启动类加上@EnbleAspectJAutoProxy就能支持AOP

 

@EnableAspectJAutoProxy

首先我们跟入到源码中,进入到@EnbleAspectJAutoProxy类中,我们可以发现它有两个成员属性

  proxyTargetClass:

    表明该类采用CGLIB代理还是使用JDK的动态代理,如果选择为true则是cglib,false则尽可能选择JDK,如果bean没有实现任何接口,就算是false也会选择cglib。

  exposeProxy:

    解决内部调用不能使用代理的场景,默认为false表示不处理,true则表示这个代理对象的副本可以通过AopContext.currentProxy()获得(ThreadLocal里面),从而

    我们可以很方便得在Spring框架上下文中拿到当前代理对象(处理事务时很方便)

 

通过注解将类当作Bean管理起来的方式

  @Controller @Service @Repository @Component 标记的类

  @Bean 标记的方法

  @Import

 

SpringAOP的总体流程

  注册解析AOP的服务

  解析和加载横切逻辑

  将横切逻辑织入目标Bean中

 

观察代码:

在AspectJAutoProxyRegistrar类上的registerBeanDefinitions()方法打上断点观察代码:

  当我们Main方法加载容器的时候,便会执行到AbstractApplicationContext的refresh()方法。在方法刚开始执行的时候,会去调用作为上下文中的Bean注册工厂的后置处理器也就是invokeBeanFactoryPostProcessors()方法。

  能看到注册AOP创建类的操作是在调用容器级别的后置处理器方法中。

 

posted @ 2021-02-28 09:52  _kerry  阅读(2118)  评论(0编辑  收藏  举报