框架优点:
1.轻量级的容器框架没有侵入性
2.使用IoC容器更加容易组合对象直接间关系,降低耦合
3.Aop可以更加容易的进行功能扩展
4.创建对象默认是单例的,不需要再使用单例模式进行处理
缺点:业务功能依赖spring特有的功能,依赖于spring环境。
Ioc和 DI:依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色 需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中 创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者, 因此也称为依赖注入。
spring注入的两种方式: set注入和构造注入。
set注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。
spring中面向切面编程的实现有两种方式,一种是动态代理,一种是CGLIB
jdk代理和cglib代理的区别:
1.JDK动态代理只能对实现了接口的类生成代理,而不能针对类
2.CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
3.动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
4.而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
如何强制使用CGLIB实现AOP?
(1)添加CGLIB库,SPRING_HOME/cglib/*.jar
(2)在spring配置文件中加入<aop:aspectj-autoproxyproxy-target-class="true"/>
什么是AOP?
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面
面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。
aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性