Spring 的概念
Spring :
spring 是 一个轻量级的IOC和AOP容器框架
Spring的优点:
1. Spring 是非侵入式的,基于Spring开发的应用一般不依赖于Spring 的类
2. Spring 是的容器,因为它包含并且管理应用对象生命c周期和配置,比如对象的创建,销毁,回调等
3. Spring 提供对事务的管理
4. Spring 对主流的框架提供了很好的集成,它相当于一个粘合剂,比如和hebrernate Spring MVC MyBatis 等框架的集成
Spring 的核心AOP IOC
IOC:
Invert of control,控制反转,也称为 DI(依赖注入)。依赖对象的创建和维护交给了 spring 容器来管理,应用程序本身 不需要负责依赖对象的创建和维护,简单理解就是把原本应该我们去
AOP:
面向切面编程,本质就是拦截器,比如项目中的事务和日志就是很好的体现了 AOP。比如:操作数据库的增删改之前,都需 要开启事务,增删改之后,都需要提交事务,这样我们就可以写一个拦截器,底层就是采用动态代理实现前置通知和后置通知,在前 置通知中开启事务,在后置通知中提交事务,在 spring.xml 中配置通知即可,spring 的事务管理底层就用到了 AOP
Spring bean的生命周期
1.Bean容器找到配置文件中Spring Bean的定义
2.Bean容器利用Java Reflection API创建一个Bean的实例
3.如果涉及到一些属性值,利用set()方法设置一些属性值
4.如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。
5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。
6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例
7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。
8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法
9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法
10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。
11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法。
12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法。
13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。
Spring 的注入方式
①. setter 注入:对于习惯了传统的 JavaBean 开发的程序员来说,通过 setter 方法注入属性值是熟悉的、直观的和自然的。 如果依赖关系比较复杂,那么构造方法注入方式会导致构造方法相当庞大,此时使用设值方式更为简洁
②. 构造注入:构造方法注入很好的响应了 Java 设计原则之一,在构造期间即可创建一个完整、合法的对象;避免了繁琐的 setter 方法的编写,所有的依赖关系均在构造方法中设定,依赖关系集中体现;