Spring
spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发的复杂性诞生的
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB
范围:任何Java应用
优点:低侵入式,代码污染低;write once,run anywhere;DI有效降低耦合度;AOP提供了通用任务的集中管理;
ORM和DAO简化了对数据库访问;高度开放性;
优势:有效组织中间层对象;使用统一的配置文件;减少编程代价,易于单元测试;使EJB成为一种备选
特点:方便解耦,简化开发;AOP编程的支持;声明式事物的支持;方便程序的测试;方便集成各种优秀的框架;
降低JavaEE API的使用难度
核心容器(Spring Core):BeanFactory,使用工厂模式实现,使用控制反转的模式
应用上下文(Spring Context):配置文件
AOP模块(SpringAOP):将面向切面的编程集成到Spring中
JDBC和DAO模块(Spring DAO)
Spring IOC
由Spring来负责控制对象的生命周期和对象间的关系
传统开发模式:对象之间互相依赖
IOC开发模式:IOC容器安排对象之间的依赖
控制反转:若某一个对象需要另一个对象,按传统的方式来说,需要该对象主动创建另一个对象;在spring中,若某一个对象需要另一个对象,则IOC创建并提供另一个对象,这时该对象不需要主动创建,只需要被动接受,因此称为控制反转。
依赖注入(DI):IOC也可称为依赖注入,所谓的依赖注入,就是由IOC容器子在运行期间,动态地将某种依赖关系注入到对象之中。所以,依赖注入(DI)和控制反转(IOC)是从不同角度描述同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象的解耦
IOC在编程过程中不会对业务对象构成很强的侵入性,使用IOC之后,对象具有更好的可实用性,可重用性和可扩展性:
- 降低组件之间的耦合度
- 提高开发效率和产品质量
- 统一标准,提高模块的复用性
- 模块具有热插拔特性
Sping AOP
通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率
AOP专门用于处理系统中分布于各个模块交叉关注点的问题,在Java中,通常通过AOP处理一些横切性质的系统级服务,如事物管理,安全检查,缓存,对象池管理等,AOP成为一个常用的解决方案
AOP代理由AOP框架动态生成一个对象,该对象可作为目标对象使用,AOP代理所包含的方法和目标方法如图所示:
定义普通业务组件
定义切入点
定义增强处理
总结:一个组件A,不关心其他常用的服务组件B,但是这个组件A使用组件B的时候,不是组件A自身去调用,而是通过配置等其他方式,比如Sping中可以通过xml配置文件。这样就使得A不需要服务组件B是怎样的,是否存在,A只需要关系自己的业务逻辑,具体逻辑是怎么样的,由配置文件去解决。