对spring的理解是什么?

spring:

    1、开源框架;

    2、IOC(控制反转),将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合;

    3、AOP将安全、事务等于程序逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能插进去,实现了按照方面编程,提高了复用性。


spring是一个轻型容器,其核心是bean工厂,用以构造我们所需要的Model。在此基础之上,spring提供了aop的实现,用他来提供非管理环境下申明方式的事务、安全等服务;对bean工厂的扩张applicationContext更加方便我们实现j2ee的应用;

DAO/ORM的实现方便我们进行数据库的开发;


spring 的优点 

1、降低了组件之间的耦合性,实现了软件各层之间的解耦;

2、可以使用容易提供的众多服务,如事务管理、消息服务等;

3、容器提供单例模式支持

4、容器提供了AOP计算,利用它很容易实现如权限拦截、运行期监控等功能;

5、容器提供了众多的辅助类,能加快应用的开发;

6、spring对于主流的应用框架提供了集成支持,如Hibernate、JPA、Struts等;

7、spring属于低侵入式设计,代码的污染极地;

8、独立于各种应用服务器

9、spring的DI机制降低了业务对象替换的复杂性;

10、spring的高度开放性,并不强制应用完全依赖于spring,开发者可以自由选择spring的部分或全部


AOP,面向切面编程完善spring的依赖注入(DI),面向切面编程在spring中主要表现为2个方面

1、面向切面编程提供声明式事务管理;

2、spring支持用户自定义的切面;

面向切面的编程是丢面向对象编程(oop)的补充,

面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。

AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,AOP是动态的抽象,

是对应用执行过程中的步骤进行抽象,从而获取步骤之间的逻辑划分


AOP,面向切面编程。AOP适合于那些具有横切逻辑的应用:如性能监测、访问控制、事务管理、缓存、对象池管理以及日志记录。AOP将这些分散在各个业务逻辑中的代码通过横向切割的方式抽取到一个独立的模块中。AOP实现的关键就在于AOP框架自动创建的AOP代理,AOP代理则可分为静态代理和动态代理两大类,其中静态代理是指使用AOP快你赶紧提供的命令进行编译,从而在编译阶段就可生成AOP代理类,因此也称为编译时增强;而动态代理则在运行时借助于JDK动态代理、CGLIB等在内存中“临时“生成AOP动态代理类,因此也被称为运行时增强。


spring AOP是通过动态代理来实现业务逻辑的插入,是开发者在开发时不用关注其他与业务无关的点,通过代理的方式做到了插拔式操作。

IOC其实是遵循了软件设计理念的依赖倒转原则,面向对象的设计就是为了实现软件的更好的复用性和扩展性,我们就必须降低我们每个pojo的依赖关系,也就是解耦,耦合度低了,我们才能更好的重用和扩展。


AOP,面向切面编程,目标就是分离关注点。就是要做的事,就是关注点。灵活组合,达到一种可配置的可插拔的程序结构。

AOP最大的用户就在于提供了事务管理的能力。事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务,所以spring在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务。

AOP要做的就是在用户不知道的情况下,将我们的调用点包裹起来,把原来的功能进行分离。


IOC,依赖倒置、控制反转的意思。将对象的创建和获取提取到外部,由外部容器提供需要的组件。

IOC要做的就是在调用点上从原来的主动生成一个调用点,变成被动的接受一个调用点。