① Spring IOC / DI
Spring IOC / DI概念
将对象创建和属性赋值的权利,转移到spring工厂中完成,解耦和,提高了开发效率,极大提高了代码可维护性。
Spring IOC / DI底层实现原理
- 问题说明:Spring是如何通过配置文件,就完成了对象的创建和属性的赋值?
答案:
- 使用工厂设计模式 + 配置文件 + 反射
- 描述:
使用工厂设计模式,在工厂中,根据配置文件中标签的class属性,反射创建出对象。
再根据标签的子标签标签的name属性,反射找到对应的set方法,反射调用set方法将标签的value属性的值 赋给属性。
② Spring AOP
Spring AOP概念
问:你对Spring AOP有什么理解?
-
思想: 面向切面编程
在不修改目标类代码的情况下,在运行时,动态的为目标对象的目标方法增加额外功能,实现解耦合,提高代码的可维护性。 -
本质: 在不修改目标类代码的情况下,在运行时,动态的为目标对象生成代理对象,用代理对象取而代之,代替目标对象接受调用,变相的实现了功能增强的效果。
B Spring AOP底层实现原理 I
问题说明: Spring AOP是如何生成代理类对象的?
答案: 使用JDK的Proxy的静态方法newProxyInstance,内部执行动态字节码技术,产生代理类对象,产生代理类的对象。基于接口生成的。
- 代理类的构成要素?
- 目标对象的接口
- 增强功能的代码
- 目标对象,目标方法调用
Spring AOP底层实现原理?
动态字节码技术:java程序生成class文件对应的byte[]
产生思路:
- 使用java的动态字节码技术产生代理类的字节数组。
- 使用ClassLoader将byte[]转化为代理类的类对象
- 通过代理类对象,反射创建类的对象。
具体代码实现
C Spring AOP底层实现原理 II
- JDK动态生成代理类的缺点:必须要求,目标类有接口。
- 第二种静态代理
- 如果目标类有接口,springaop,会使用基于接口方式(JDK)方式动态生成代理类。
- 如果目标类没有有接口, springaop也能产生代理类, cglib技术,基于继承成生成的代理类。
-代理类:
a. 与目标类拥有相同的方法.
b. 额外功能
c. 调用目标对象的方法
- cglib动态代理
动态生成基于继承代理类 - cglib编程核心思路
- cglib的编码
- 总结Spring AOP的原理
- 如果目标类有接口, springaop 会使用jdk的动态字节码技术,Proxy.newProxyInstance方法,动态产生基于接口的代理类的对象。
- 如果目标类没有接口,spring啊aop使用cglib的动态字节码技术,动态产生基于继承的代理类的对象。
上一篇:Spring整合Struts2与Spring整合MyBatis
下一篇:SpringMVC基本使用