spring IOC与AOP

IOC原理与实现

总:

控制反转:理论思想,原来的对象是由使用者来进行控制,有了spring之后,可以把整个对象交给spring来帮我们进行管理
DI:依赖注入,把对应的属性的值注入到具体的对象中,@Autowired,populateBean完成属性值的注入
作为容器:存储对象,使用map结构来存储,在spring中一般存在三级缓存,singletonObjects存放完整的bean对象,整个bean的生命周期,从创建到使用到销毁的过程全部都是由容器来管理(bean的生命周期)

分:

1、一般聊ioc容器的时候要涉及到容器的创建过程(beanFactory,DefaultListableBeanFactory),向bean工厂中设置一些参数(BeanPostProcessor,Aware接口的子类)等等属性
2、加载解析bean对象,准备要创建的bean对象的定义对象beanDefinition,(xml或者注解的解析过程)
3、beanFactoryPostProcessor的处理,此处是扩展点,PlaceHolderConfigurSupport,ConfigurationClassPostProcessor
4、BeanPostProcessor的注册功能,方便后续对bean对象完成具体的扩展功能
5、通过反射的方式讲BeanDefinition对象实例化成具体的bean对象,
6、bean对象的初始化过程(填充属性,调用aware子类的方法,调用BeanPostProcessor前置处理方法,调用init-mehtod方法,调用BeanPostProcessor的后置处理方法)
7、生成完整的bean对象,通过getBean方法可以直接获取
8、销毁过程

AOP 的底层实现原理

aop是ioc的一个扩展功能,先有的ioc,再有的aop,只是在ioc的整个流程中新增的一个扩展点而已:BeanPostProcessor
总:
概念:AOP 即⾯向切⾯编程,简单地说就是将代码中重复的部分抽取出来,在需要执⾏的时候使⽤动态代理技术,在不修改源码的基础上对⽅法进⾏增强。
动态代理:Spring根据类是否实现接口来判断动态代理的方式,如果实现接口会使用JDK动态代理,核心是InvocationHandler接口和Proxy类,如果没有实现接口会使用CGLib动态代理,CGLib是在运动时动态生成某个类的子类,如果类被标记为final,不能使用CGLib。
JDK的动态代理主要通过重组字节码实现,首先获得被代理对象的引⽤和所有接⼝,⽣成新的类必须实现被代理类的所有接⼝,动态⽣成Java 代码后编译新⽣成的 .class ⽂件并重新加载到 JVM 运⾏。JDK
代理直接写 Class 字节码, CGLib 是采⽤ ASM 框架写字节码,⽣成代理类的效率低。但是 CGLib 调⽤
⽅法的效率⾼,因为 JDK 使⽤反射调⽤⽅法, CGLib 使⽤ FastClass 机制为代理类和被代理类各⽣成⼀个类,这个类会为代理类或被代理类的⽅法⽣成⼀个 index,这个 index 可以作为参数直接定位要调⽤
的⽅法。

应用场景:权限认证、⾃动缓存、错误处理、⽇志、调试和事务等
分:
​ bean的创建过程中有一个步骤可以对bean进行扩展实现,aop本身就是一个扩展功能,所以在BeanPostProcessor的后置处理方法中来进行实现,
​ 1、代理对象的创建过程(advice,切面,切点)
​ 2、通过jdk或者cglib的方式来生成代理对象
​ 3、在执行方法调用的时候,会调用到生成的字节码文件中,直接回找到DynamicAdvisoredInterceptor类中的intercept方法,从此方法开始执行
​ 4、根据之前定义好的通知来生成拦截器链
​ 5、从拦截器链中依次获取每一个通知开始进行执行,在执行过程中,为了方便找到下一个通知是哪个,会有一个CglibMethodInvocation的对象,找的时候是从-1的位置一次开始查找并且执行的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值