Spring Bean
2016-04-11 22:56
260 查看
Spring IOC 容器中 Bean 的生命周期
1、通过构造器或工厂方法创建 Bean 实例:调用构造器2、为 Bean 的属性设置值和对其他 Bean 的引用:调用 setter
3、调用BeanAware接口
如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用
如果Bean有实现BeanFactoryAware接口的那么对这些Bean进行调用
如果Bean有实现ApplicationContextAware接口的那么对这些Bean进行调用
4、后置处理器Before Init
将 Bean 实例传递给 Bean 后置处理器的 postProcessBeforeInitialization 方法
5、如果bean实现IntializingBean了,调用它的afterPropertySet方法
6、调用 Bean 的初始化方法:init-method
7、后置处理器After Init
将 Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法
8、使用Bean
9、当容器关闭时, 调用 Bean 的销毁方法:destroy-method。
自动装配 (bean标签的autowire属性)
作用:不明确配置,自动将某个bean 注入到另一个bean的属性当中分类:
(1)byname:通过id 的名字来进行匹配,
(2)byType:通过类型来进行匹配
(3)constructor:根据java 源程序中定义的构造方法,再根据类型进行匹配。
(4)autodetect:完全交给spring管理, spring 则再根据constructor a byType的顺序进行匹配。
注:
自动装配的优先级低于手动装配
自动装配一般应用于快速开发中,但是不推荐使用,代码简单,但是一方面容易出错,另一方面也不方便后期的维护
bean作用域
默认情况下,容器是按照单例的方式去创建的bean,如果不想使用那么用(scope=” “)定义bean的使用范围经常使用的是前两种:
(1)Singleton
默认的,单例
(2)Prototype
每次取出的都是新的对象,每次对该Bean请求(将其注入到另一个Bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的Bean实例。
(3)Request
bean的生命周期和一个http请求一直
(4)Session
在一个会话周期中有效
prototype作用域的Bean会导致在根据经验,对有状态的Bean应使用prototype作用域,而对无状态的Bean则应该使用singleton作用域。
对于具有prototype作用域的Bean,有一点很重要,即Spring不能对该Bean的整个生命周期负责。具有prototype作用域的Bean创建后交由调用者负责销毁对象回收资源。
简单的说:
singleton 只有一个实例,也即是单例模式
prototype访问一次创建一个实例,相当于new
应用场合:
1、需要回收重要资源(数据库连接等)的事宜配置为singleton,如果配置为prototype需要应用确保资源正常回收。
2、有状态的Bean配置成singleton会引发未知问题,可以考虑配置为prototype。
prototype默认lazy-init=true,只有在第一次getBean的时候才会实例化Bean
延迟加载
ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化(也就是依赖注入)。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。<bean id="testBean" class="com.fhx.TestBean">
该bean默认的设置为:
<bean id="testBean" class="com.fhx.TestBean" lazy-init="false">
lazy-init=”false” 立退加载, 表示spring启动时,立刻进行实例化。
相关文章推荐
- 【华为机试题】将输入字符串中的大写字符改为小写,标点符号空格等删除
- 【华为机试题】将输入字符串中的大写字符改为小写,标点符号空格等删除
- java中构造函数中变量初始化时机
- SpringMVC与Struts 的区别
- Java中修饰符,包装类,抽象类
- springmvc事务回滚失效
- 把java中的list对象转换成net.sf.JSONArray类型对象
- 代理模式(java语言实现)
- 如何在eclipse中更改jsp页面的charset以解决中文乱码问题
- 主讲spring mvc 在web.xml中的配置
- Java中的字符串类
- Java中的取模运算
- 基于Hadoop技术实现的离线电商分析平台(Flume、Hadoop、Hbase、SpringMVC、highcharts)
- java 反射 调用
- 基于Hadoop技术实现的离线电商分析平台(Flume、Hadoop、Hbase、SpringMVC、highcharts)
- java.net.SocketException: Too many open files解决方法
- JEECG 3.6.3版本发布 企业级JAVA快速开发平台
- java事务介绍
- Spring 简单IOC实现
- Java Vector遍历方法