码迷,mamicode.com
首页 > 编程语言 > 详细

Spring容器

时间:2017-11-09 22:45:08      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:默认   创建对象   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,发现多个不知道匹配哪一个。

Spring容器

标签:默认   创建对象   contex   也会   app   tco   uniq   依赖   java   

原文地址:http://www.cnblogs.com/ysy6233/p/7811211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!