标签:默认 创建对象 contex 也会 app tco uniq 依赖 java
为整个系统所组成的所有组件提供运行环境
Spring IOC可管理的都是一切可实例的类
Spring管理的对象都是单实例的,不能实例有存储能力的类(JavaBean)
管理组件的两种方式:
1.构造注入
2.设值注入
由容器向实例注入的过程叫依赖注入,也叫控制反转。
创建对象的控制权交给了Spring容器。
Spring提供了两个核心接口:
1.BeanFactory---调用getbean()时实例化对象
2.ApplicationContext---容器产生就实例化对象
他们都可以代表Spring容器,是生成Bean实例的工厂,并管理。在基于Spring的EE应用,所有
组件都被当成Bean处理。
Spring容器产生的对象默认都是单实例的,并且他的整个生命周期都由容器负责管理。
<scope="prototype" 原型模式,容器产生对象时,以第一个为原型,调用一次则产生一个新的对象,这时容器不知道你的程序调用了多少次,所以他不再负责对象的生命周期,它只负责生,不负责养。由程序自身去负责对象的生命周期(GC)>
<scope="request" 该作用域与HTTP Request相关,当容器接收到一个HTTP请求时,容器产生一个对应的对象,当HTTP Request处理完毕,容器销毁已产生的该实例>
<scope="session" 该作用域与HTTP Session相关,当容器接收到同一个Session会话时,容器产生一个对应的实例对象,当HTTP Session关闭时,容器销毁已经产生的该实例>
<scope="global session" 当程序是分布式情况,并且程序是做了Session同步的情况,整个程序中所有的spring容器只产生一个对应的实例对象,如果我们不是分布式情况,或者说没有做Session同步的情况,那么即便你设值了global session,那么作用范围也会回退到session层面>
<scope="application" 表示该对象的作用范围与ServletContext保持一致>
##自动装配:
byName采用属性的属性名来完成装配,首先容器检查待装配对象的属性名,获取需要装配的属性名回到容器中进行查找,如果容器中存在于属性名一致的对象,那么装配成功。
装配时,即使装配失败,也不会抛出任何异常,但是在运行阶段,会抛出空指针。
byType采用属性的类型完成装配,如果属性类型是接口,那么在容器中查找接口的实现类的实例是否存在,如果存在一个,则调用setter()来完成装配。如果一个都没有,装配失败。在装配时,即便失败了,也不会抛出异常,运行时抛出NullPointException
如果存在多个,装配失败,装配时抛出异常:NoUniqueBeanDefinitionException,发现多个不知道匹配哪一个。
标签:默认 创建对象 contex 也会 app tco uniq 依赖 java
原文地址:http://www.cnblogs.com/ysy6233/p/7811211.html