Spring框架的AOP实现原理及常见的例子

spring ioc默认的都是原生对象(动态创建原生对象) 只有通过aop增强的对象才是代理对象(动态创建代理对象)
ioc创建的对象是单例的
aop的对象是用一次创建一次

@Async、@Transactional、@Cacheable等注解标注的方法都会被spring中的aop创建动态代理对象

那么aop创建动态代理对象是通过什么方式呢--------Cglib
简单理解:CGLIB的动态代理,是基于现有类创建一个子类(所以在springboot异步调用的文中提到使用@asyno 要单独写在一个类中),并实例化子类对象(动态代理对象)。在调用动态代理对象方法时,都是先调用子类方法,子类方法中使用方法增强Advice或者拦截器MethodInterceptor处理子类方法调用后,选择性的决定是否执行父类方法。

在springboot项目中@Configuration也是利用cglib创建
这也是@Configuration和@Component的区别
Component注解也会当做配置类,但是并不会为其生成CGLIB代理Class,用一次new创建一次对象,所以是不同的对象。当时Configuration注解时,生成当前对象的子类Class,并对方法拦截,第二次调用时直接从BeanFactory之中获取对象,所以得到的是同一个对象。
也可以这样理解:@Configuration是随容器启动开始加载的,始终存在的单例模式。 @Component是使用一次即实例化一次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值