对Spring的理解

来源:互联网 发布:sql 某个字段去重复 编辑:程序博客网 时间:2024/05/16 08:48

Spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架,是非侵入式的,高内聚低耦合(侵入式指的是耦合太强了)
先来说一说AOP,AOP用来处理一些具有横切性质的系统服务(事务管理,安全检查,记录日志),比如不同模块(用户管理,订单管理,商品管理),有三层架构开发,分不同的包,那么Service(业务层)横着看,连成一条线,就是切面,在每个Service上统一添加一个开启事务和结束事务的代码,看起来好像在一个切面上统一做了一件事,就是所谓的面向切面编程。
AOP的底层原理就是代理模式:因为要在一个已经存在的程序------比如Service的某个部位添加功能(比如开启事务),不可以更改代码,所以要创建一个代理类,当使用者想调用Service的某个方法时,要让使用者不去调用原来的Service,而让它来调用我们创建的代理类,使用者调用doAdd()方法,此时代理类也有doAdd(),Service的doAdd()是最终要调用的方法,为了给Service额外添加功能,代理类不会只是转调Service的doAdd(),它会先开启事务,然后再调用,最后关闭事务。综上所述,也就是使用者------>代理类------->Service类
AOP主要是通过动态代理实现:因为静态代理就是每代理一个类,就要为这个类写一个代理类,而动态代理,是通过Java的反射机制,实现一段代码能够动态生成所有被代理类的代理对象。
IOC(控制反转),从Spring的角度,原来组件实例的创建以及组件之间的相互调度,都是组件自己主动进行的,而现在交给了Spring。在Spring中,IOC是Spring的核心,它是个容器,里面存放的是大量已经实例好的bean以及这些bean之间的依赖关系。在使用IOC容器之后,将所有对象的创建与销毁交给了IOC去操作,即IOC容器在运行期间,动态的将某种依赖关系注入到对象中去,也就实现了对象间的解耦,Spring通过控制反转做到了解耦,当应用了IOC时,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象,此时创建被调用者的实例的工作通常由Spring容器完成,然后注入调用者,因此称为依赖注入,而核心控制器IOC的主要组件是BeanFactory,是工厂模式的实现。软件系统引入IOC容器之后,对象A和对象B之间失去了直接联系,所以,当对象A实例化和运行时,如果需要对象B的话,IOC会主动创建一个对象B注入到对象A所需要的地方,组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件中,目的是为了提升组件的可重用性,使系统灵活,可扩展。

原创粉丝点击