Bean的基本定义
2018-02-05 00:00
211 查看
<beans>标签的属性
<beans>元素是Spring配置文件的根元素,该元素下可以指定如下属性:1)default-lazy-init:指定该<beans>元素下所有的Bean默认的延迟初始化行为;
2)default-merge:指定该<beans>下配置的所有Bean默认的merget行为;
3)default-autowire:指定该<beans>元素下配置的所有Bean默认的自动装配行为;
4)default-autowire-candidates:指定该<beans>元素下配置的所有Bean默认是否作为自动装配的候选Bean。
5)default-init-method:指定该<beans>元素下配置的所有Bean默认的回收方法。
<beans>元素上面所能指定的属性都可以在每个<bean> 子元素中指定--将属性名default去掉即可。
当我们在配置文件中通过<bean id="xx" class=""/>方法配置一个Bean时,这样要求该Bean实现类必须有一个无参数的构造器。并且calss必须为具体的实现类,不能为接口。
在默认情况下,当Spring创建ApplicationContext容器时,Spring会自动预初始化容器中所有的singleton实列,如果不想让Spring容器预初始化某个singleton Bean,则可以为该<bean>元素增加lazy-init属性,指定该属性为true,则Spring不会预初始化该Bean实列。
容器中Bean的作用域
当通过Spring容器创建一个Bean实列时,不仅可以完成Bean实列的实列化,还可以为其指定作用域;1)singleton:单列模式,在整个Spring IOC容器中,使用singleton定义的Bean将只有一个实列。这也是Spring的默认作用域。
2)prototype:原型模式,每次通过getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实列。
3)request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实列,即每次HTTP请求将会产生不同的Bean实列。只有在Web应用中使用Spring时,该作用域才真正有效。
4)session:对于每次HTTP Session,使用session定义的Bean都将产生一个新实列,即每次HTTP Session都将产生不同的Bean实列。只有在Web应用中使用Spring时,该作用域才真正有效。
5)global session:每个全局的HTTP Session对应一个Bean实列。典型情况下,仅在使用protlet context的时候有效。只有在Web应用中使用Spring时,该作用域才真正有效。
<!-- 单列 --> <bean id="stoneAxe1" scope="singleton" class="com.custle.spring.StoneAxe"/> <!-- 原型 --> <bean id="stoneAxe2" scope="prototype" class="com.custle.spring.StoneAxe"/>
测试程序:
package com.custle.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class BeanTest { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-spring.xml"); // 判断stoneAxe1--单列 System.out.println("单列对象是否为同一对象:" + (applicationContext.getBean("stoneAxe1") == applicationContext .getBean("stoneAxe1"))); // 判断stoneAxe2--单列 System.out.println("原型对象是否为同一对象:" + (applicationContext.getBean("stoneAxe2") == applicationContext .getBean("stoneAxe2"))); } }
控制台输出:
单列对象是否为同一对象:true 原型对象是否为同一对象:false
从这可以看出:对于singleton作用域的Bean,每次请求该ID的Bean,都将返回同一个共享实列,因而两次获取的Bean实列完全相同;但对于prototype作用域的Bean,每次请求都将产生新的实列。
如果将该Bean的作用域范围该为reauest,针对每次HTTP请求,Spring容器会根据该Bean定义一个全新的Bean实列,并且该Bean实列仅在当前HTTP Request内有效。
相关文章推荐
- 7.5.1: Spring容器中的Bean---Bean的基本定义
- Bean的基本定义 推荐
- 7.5.1: Bean的基本定义
- Spring定义基本类型Bean
- Spring - Bean 的定义
- 《Spring技术内幕》学习笔记4——IoC容器解析Bean定义资源并注册解析后的Bean
- 常用CSS2基本定义例子
- Java框架spring 学习笔记(五):Bean定义继承
- 数据结构_图_定义/分类/顶点与边之间的关系/连通图/存储结构/基本操作
- 在eclipse中设计BPMN 2.0工作流定义的基本步骤
- 【第五章】Spring表达式语言 之 5.4在Bean定义中使用EL—跟我学spring3
- rfc 定义的rtp和rtcp协议基本包格式
- [数据结构与算法] 1,一些基本的定义
- c++基本类型定义
- spring:bean的定义
- Spring3系列5-Bean的基本用法
- day26数据库基本类型、常用函数、变量的定义、循环
- js的基本对象的定义(转)
- 第7章 sed、gawk介绍与正则表达式-----------(定义基本正则表达式(BRE)模式)
- 树 - 定义和基本概念