spring
1、spring容器:spring框架认为应用程序由一个又一个组件构成,而spring容器就是对这些组件的生命周期进行管理及关系的维护------IoC-----工厂模式/反射
2、spring容器的接口BeanFactory和ApplicationContext,ApplicationContext是BeanFactory的子接口。两者实例化容器中的Bean的时机不同,前者 在容器创建ApplicationContext实例时,会预初始化容器中的全部需要的Bean,后者需等到程序需要时才会创建。对于普通凡人JavaEE应用,推荐 使用ApplicationContext做为spring容器,因为它在创建容器会同时创建需要的所有Bean,因而会有更大的系统开销,但是后面的响应速度会更快。
3、spring的特点:(1)、轻量,低侵入式;
(2)、依赖注入(IoC),降低了业务对替换对象的复杂性,提高了组件之间的解耦;在容器在容器
(3)、面向切面(AOP),将功能业务与非功能业务分离开来;
(4)、容器;
(5)、框架,支持与其他框架的整合。
4、spring容器允许我们在创建对象时,就初始化某些属性。
两种方法:set();设置注入 、 构造函数 构造注入。
5、IoC 即用XML来定义生成的对象。 工厂模式+反射
依赖注入(控制反转)是调用者依赖容器设置容器属性或者注入其他Bean的引用的方式。
程序运行过程中,如果需要另一个对象协作,无须在代码中创建被调用者,直接通过容器注入。
依赖注入是目前最优秀的解耦方式,依赖注入让spring的Bean已配置文件组织在一起,而不是以硬编码(new)的方式耦合在一起。
6、组件作用域
singleton 单例对象,在容器管理范围内
prototype 原型对象,容器创建----垃圾回收(由jvm回收)
request 同一个请求范围内
session 同一个会话范围内
global session(门户网站使用)
7、组件的自动装配
(1)、设置<bean>元素的属性autowire
(2)、autowire自动装配类型:byName
byType
constructor
autodetect
(3)、byName,byType都是使用setting注入方式
(4)、byName自动装配的时候,会根据调用者中需要装配的属性名称去查找spring容器,看是否有对应的Bean组件的实例存在,如果存在就自动装配,如果不存在,就装配失败,但不会抛出任何异常,只有当程序运行时,才会抛出空指针异常
(5)、byType自动装配的时候,会根据调用者中需要装配的属性的类型去查找spring容器,看是否有对应的相同类型的Bean组件的实例存在,如果类型是接口,那么就去找接口的实现类,如果存在就自动装配,如果不存在就装配不成功,但不会抛出任何异常,运行时,代码会抛出空指针。当符合条件的实例多于1个时,它不就知道装配哪一个了,就抛出:UnsatisfiedDependencyException
(6)、constructor构造装配,会根据构造器中的属性类型去查找容器,如果类型是接口,那么就去找接口的实现类,如果存在就自动装配,如果不存在就装配不成功, 但不会抛出任何异常,运行时,代码会抛出空指针。当符合条件的实例多于1个时,它不就知道装配哪一个了,就抛出:UnsatisfiedDependencyException
8、手动装配>自动装配,当两者同时存在时,以手动装配为准,自动装配虽然简单,直接,粗暴,但是结构不清晰,维护性很差,推荐使用手动装配