美文网首页工作生活
spring容器(七):AOP原理

spring容器(七):AOP原理

作者: aix91 | 来源:发表于2019-06-29 21:39 被阅读0次

在创建Bean的最后,会调用BeanPostProcessor方法;AOP本质上就是一个BeanPostProcessor。那么在创建Bean的最后,通过BeanPostProcessor方法生成代理类Bean,从而实现AOP功能。

1. AOP原理:applyBeanPostProcessorsAfterInitialization

在使用AOP时,要手动enable EnableAspectJAutoProxy, 由此也就引入了AnnotationAwareAspectJAutoProxyCreator 这个BeanPostProcessor, 于是在applyBeanPostProcessorsAfterInitialization 的函数中,会为bean创建AOP代理对象。

AnnotationAwareAspectJAutoProxyCreator

2. AOP对象生成(AbstractAutoProxyCreator)

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    if (bean != null) {
        Object cacheKey = getCacheKey(bean.getClass(), beanName);
        if (!this.earlyProxyReferences.contains(cacheKey)) {
            return wrapIfNecessary(bean, beanName, cacheKey);
        }
    }
    return bean;
  }

4. 生成代理类 wrapIfNecessary

protected Object wrapIfNecessary(){

    Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null);
    if (specificInterceptors != DO_NOT_PROXY) {
        this.advisedBeans.put(cacheKey, Boolean.TRUE);
        //根据advice,生成代理bean
        Object proxy = createProxy(
                    bean.getClass(), beanName, specificInterceptors, new SingletonTargetSource(bean));
        this.proxyTypes.put(cacheKey, proxy.getClass());
        return proxy;
    }
    //不能生成代理类,返回初始bean
    this.advisedBeans.put(cacheKey, Boolean.FALSE);
    return bean;
}

5. createProxy: Spring使用CGLib的方式生成代理类

protected Object createProxy(){
  //  待补充
}

相关文章

  • spring容器(七):AOP原理

    在创建Bean的最后,会调用BeanPostProcessor方法;AOP本质上就是一个BeanPostProce...

  • 五、AOP的定义和原理

    一、本课目标 理解Spring AOP的原理 掌握Spring AOP的七个术语 二、面向切面编程(AOP) 在上...

  • spring ioc容器之BeanDefinition注册

    这段时间开始了对spring的复习,spring的模块很多,这里主要对spring ioc容器、aop的实现原理和...

  • Spring 基础5 —— AOP 与事务

    Spring 的 AOP 支持 Spring 的 AOP 代理由 Spring 的 IoC 容器负责生成、管理,其...

  • 北大医信

    1、spring的原理 Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架 1.IOC(In...

  • 2018-01-31

    spring aop @(iJava)[spring framework] [toc] aop底层原理采用动态代理...

  • 被AJC编译过的类不能成功Spring AOP的切面?

    去年写过Spring AOP原理和源码的文章:Spring AOP从原理到源码(一)[https://www.ji...

  • Spring 10问

    10问 问到头疼 IOC 容器初始化 AOP 原理,常见场景 Spring 的设计思想,设计模式 springbo...

  • AOP代理

    Spring中的AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。AOP代理可...

  • [java][SpringAOP]

    为什么会有AOP 实现AOP原理 AOP通知类型 AOP在Spring中配置

网友评论

    本文标题:spring容器(七):AOP原理

    本文链接:https://www.haomeiwen.com/subject/aalmcctx.html