Spring底层原理

① Spring IOC / DI

Spring IOC / DI概念

将对象创建和属性赋值的权利,转移到spring工厂中完成,解耦和,提高了开发效率,极大提高了代码可维护性。

Spring IOC / DI底层实现原理
  • 问题说明:Spring是如何通过配置文件,就完成了对象的创建和属性的赋值?

答案

  1. 使用工厂设计模式 + 配置文件 + 反射
  2. 描述:
    使用工厂设计模式,在工厂中,根据配置文件中标签的class属性,反射创建出对象。
    再根据标签的子标签标签的name属性,反射找到对应的set方法,反射调用set方法将标签的value属性的值 赋给属性。

② Spring AOP

Spring AOP概念

问:你对Spring AOP有什么理解?

  • 思想: 面向切面编程
    在不修改目标类代码的情况下,在运行时,动态的为目标对象的目标方法增加额外功能,实现解耦合,提高代码的可维护性。

  • 本质: 在不修改目标类代码的情况下,在运行时,动态的为目标对象生成代理对象,用代理对象取而代之,代替目标对象接受调用,变相的实现了功能增强的效果。

B Spring AOP底层实现原理 I

问题说明: Spring AOP是如何生成代理类对象的?

答案: 使用JDK的Proxy的静态方法newProxyInstance,内部执行动态字节码技术,产生代理类对象,产生代理类的对象。基于接口生成的。

  • 代理类的构成要素?
  1. 目标对象的接口
  2. 增强功能的代码
  3. 目标对象,目标方法调用

Spring AOP底层实现原理?
动态字节码技术:java程序生成class文件对应的byte[]
产生思路:

  1. 使用java的动态字节码技术产生代理类的字节数组。
  2. 使用ClassLoader将byte[]转化为代理类的类对象
  3. 通过代理类对象,反射创建类的对象。
    在这里插入图片描述
具体代码实现

在这里插入图片描述

C Spring AOP底层实现原理 II
  1. JDK动态生成代理类的缺点:必须要求,目标类有接口。
  2. 第二种静态代理
  • 如果目标类有接口,springaop,会使用基于接口方式(JDK)方式动态生成代理类。
  • 如果目标类没有有接口, springaop也能产生代理类, cglib技术,基于继承成生成的代理类。
    -代理类:
    a. 与目标类拥有相同的方法.
    b. 额外功能
    c. 调用目标对象的方法
    在这里插入图片描述
  1. cglib动态代理
    动态生成基于继承代理类
  2. cglib编程核心思路
    在这里插入图片描述
  3. cglib的编码
    在这里插入图片描述
  4. 总结Spring AOP的原理
  • 如果目标类有接口, springaop 会使用jdk的动态字节码技术,Proxy.newProxyInstance方法,动态产生基于接口的代理类的对象。
  • 如果目标类没有接口,spring啊aop使用cglib的动态字节码技术,动态产生基于继承的代理类的对象。
    上一篇:Spring整合Struts2与Spring整合MyBatis
    下一篇:SpringMVC基本使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值