Spring的优点:
方便解耦,简单开发:
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理。
AOP编程的支持:
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能。
声明式事物的支持:
只需要通过配置就可以完成对事物的管理,而无需手动编程。
方便程序的测试:
Spring对Junit4支持,可以通过注解方便的测试Spring程序。
方便集成各种优秀框架:
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持。
降低JavaEEAPI的使用难度:
Spring对JavaEE开发中非常难用的一些API(JDBC,远程调用)都提供了封装,使这些API应用难度大大降低。
所以说Spring是程序员的春天。
Spring的AOP(面向切面编程) 底层用动态代理实现。
面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点,spring2.0之后整合AspectJ第三方AOP技术。
主要功能
日志记录,性能统计,安全控制,事务处理,异常处理等等
主要意图
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
IOC(控制反转)工厂模式 管理对象 生产对象
IOC控制反转 是指对象实例化权利由spring容器来管理。
DI依赖注入 在spring创建对象的过程中,对象所依赖的属性通过配置注入对象中。
SpringBean的生命周期:
1. instantiate bean对象实例化
2. populate properties 封装属性
3. 如果Bean实现BeanNameAware执行setBeanName
4. 如果Bean实现BeanFactoryAwar或ApplicationContextAwar设置工厂setBeanFactory或上下文对象setApplicationContext
5. 如果存在类实现BeanPostProcessor(后处理Bean),执行postProcessBeforeInitialization
6. 如果Bean实现InitializingBean执行afterPropertiesSet
7. 调用自定义的init-method方法
8. 如果存在类实现BeanPostProcessor(处理Bean),执行postProcessAfterInitialization
9. 执行业务处理
10. 如果Bean实现DisposableBean执行destroy
11. 调用自定义的destroy-method
对于bean的生命周期方法:
第三步与第四步是让Bean了解spring容器。
第五步与第八步 可以针对指定的Bean进行功能增强,这时一般会使用动态代理.
第六步与第十步:通过实现指定的接口来完成init与destroy操作
但是在开发中一般不使用第6步与第10步,原因是我们可以使用第7步与第11步来完成。
第7步与第11步的初始化与销毁操作它无耦合,推荐使用的。但是必须在配置文件中指定初始化与销毁的方法