SpringAOP的实现

Spring AOP的主要工作就是围绕以下三点展开的:

  • Pointcut(切点):过滤条件,指定在那些类的那些方法上织入横切逻辑;
  • Advice(通知):用于描述横切逻辑和方法的具体织入点;
  • Advisor(通知器):将Pointcut和Advice两者组装起来;

    spring利用JDK或CGLIB的动态代理技术采用统一方式为目标bean创建织入切面的代理对象。

  • jdk动态代理技术涉及类:InvocationHandler、Proxy
  • cglib动态代理技术涉及类:MethodInteceptor、Enhancer

    个人理解springaop

    1. 代理对象的创建过程:在创建目标对象后(when),根据条件过滤符合切点要求的对象(what),创建代理对象(how);
    2. 代理方法的调用过程:根据依次执行通知器链表中的横切逻辑

// 一、解析aop标签,创建对应的BeanDefinition对象
NamespaceHandler namespaceHandler;
AopNamespaceHandler aopNamespaceHandler;

// 自动代理创建器,用于创建代理对象
// 实现BeanPostProcessor接口,该接口用于实例化前后、初始化前后调用
// 继承ProxyProcessorSupport类,用于创建代理对象
ProxyProcessorSupport proxyProcessorSupport;
SmartInstantiationAwareBeanPostProcessor smartInstantiationAwareBeanPostProcessor;
AbstractAutoProxyCreator abstractAutoProxyCreator;
AbstractAdvisorAutoProxyCreator abstractAdvisorAutoProxyCreator;
AspectJAwareAdvisorAutoProxyCreator aspectJAwareAdvisorAutoProxyCreator;

// 二、创建代理对象的条件:创建bean对象实例,createBean:populateBean:InitializeBean
AbstractAutowireCapableBeanFactory abstractAutowireCapableBeanFactory;

// 三、创建代理对象的步骤

// 3.1 获得符合条件的Advisor:getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null)
AbstractAdvisorAutoProxyCreator abstractAdvisorAutoProxyCreator1;
BeanFactoryAdvisorRetrievalHelper beanFactoryAdvisorRetrievalHelper;
BeanFactoryAdvisorRetrievalHelperAdaptor beanFactoryAdvisorRetrievalHelperAdaptor;

// 切面(adviceBeanName,pointcut)
Advisor advisor;
PointcutAdvisor pointcutAdvisor;
AbstractPointcutAdvisor abstractPointcutAdvisor;
// 接口
BeanFactoryAware beanFactoryAware;
AbstractBeanFactoryPointcutAdvisor abstractBeanFactoryPointcutAdvisor;
DefaultBeanFactoryPointcutAdvisor defaultBeanFactoryPointcutAdvisor;

// 过滤条件切点(Pointcut)
AspectJExpressionPointcut aspectJExpressionPointcut;
// 类过滤器:matches(Class

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值