总览说明:

Spring是一个轻量级的IOC和AOP容器框架。Spring是非侵入式的(所谓非侵入式就是远程调试 而不植入,spring不再用new的方式来创建对象,而是使用依赖注入的方式),基于spring开发的应用一般不依赖于spring的类。Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。如对象的创建、销毁、回调等。

关于IOC 和 AOP的 问题,我们下面再做分析。

Spring 的优点:

1,使用IOC的设计理念,降低了组件之间的耦合性,实现了软件各层之间的解耦

2,容器提供了AOP,面向切面编程的技术思想,利用它可以很容易实现一些拦截,如权限拦截、日志监控,运行期监控,事务控制等。

3,spring对于主流的应用框架提供了很好的支持和整合能力,例如mybatis、hibernate、struts2等。

4,spring采用低入侵式的设计,代码污染性极低

5,spring的DI机制降低了业务对象替换的复杂性。

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

7,整合junit模块,对于测试工作支持更强,让测试变得更简单

8,Spring对Java EE开发中非常难用的一些API(如JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

9,Spring采用了分层结构,可以增量引入到项目中

Spring 的缺点:

1.使用了大量的反射机制,反射机制非常占用内存

2.对于Spring , 对分布式的支持性不是特别的好

3.将原本应该代码化的逻辑配置化,增加了出错的机会以及额外的负担

4.到今天,越来越强大的IDE,IDE提供了诸多强大的辅助功能,使得编程的门槛降低很多。通常来说,只维护代码要比维护配置文件,或者配置文件+代码的混合体要容易的多。

5.调试阶段不直观,后期的bug对应阶段,不容易判断问题所在

关于IOC 和 AOP 要说的话:

IOC的知识(DI):

依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念。

创具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。

建对象实例的控制权从代码控制剥离到IOC容器控制(之前的写法,由程序代码直接操控使用new关键字,实际就是你在xml文件控制,控制权的转移是谓之反转,侧重于原理。所以叫控制反转。 创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现,因此也称为依赖注入

依赖注入(DI)有两种方式: 设置注入和构造注入

设置注入的优点:直观,自然 

构造注入的优点:可以在构造器中决定依赖关系的顺序。

注入的方式,在网上属于众说纷纭,每个人都有自己的见解和分析,但是经过我总结和归纳,基本上这几种是跑不了的:接口注入,构造器注入,setter注入,注解注入,XML注入

其中注解注入是未来的 一个方向,可以看看springboot就是一个例子,这样可以更方便的进行开发,简化开发和搭建步骤,让程序员更多的关注业务细节,而不是这些细枝末节的技术实现,让人专心做产品。

关于IOC和DI的总结性发言:依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同

AOP 的知识:

1.面向切面编程(AOP)完善spring的依赖注入(DI)

2.面向切面编程(aop)是对面向对象编程(oop)的补充

3.面向切面编程将程序运行过程分解成各个切面。 

aop框架具有的两个特征: 
1.各个步骤之间的良好隔离性 
2.源代码无关性

 举例说明:Spring的事务管理机制实现的原理,就是通过动态代理对所有需要事务管理的Bean进行加载,并根据配置在invoke方法中对当前调用的 方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码。