`
Luob.
  • 浏览: 1592234 次
  • 来自: 上海
社区版块
存档分类
最新评论

spring 第2天,bean作用域,自动注入集合

阅读更多
sping容器中的Bean
<!---beans的全局属性设置-->
<beans>
default-lazy-init:指定该beans下的所有bean 默认延迟初始化行为
default-merge:指定beans下的所有bean默认的mege行为
default-autowire:指定beans下的所有bean的默认自动装配行为
default-autowire-candidates:指定beans下所有bean默认是否为自动装配的候选bean
default-init-method:指定beans下的所有bean默认初始化的方法
default-destory-method:指定beans下的所有bean默认 回收方法
</beans>
<!---去掉default 后就是bean的属性,这样就可以设置单个bean的属性-->

<bean id="bean1" class="lee.test1">
    <constructor-args values="hello"/>
    <constructor-args values="23"/>
</bean>

<!--上面的bean可以配置构造函数为两个string,或者 一个 string 一个 int
这种情况下可以配置 -->

<constructor-args values="23" type="int"/>



说说Bean的别名问题,name,alias
<!--定义一个能够获取spring容器的bean  -->
	<bean id="myContent" name="CH,CN" class="cn.sh.springmvc.applicationContextAware.MyContent" lazy-init="true">
	</bean>
	<alias name="CH" alias="ZG"/>
	
	<alias name="chinese" alias="ZH"/>
	<!-- 别名之间还可以传承 -->
	<alias name="ZH" alias="HH"/>

//测试spring name alias 别名的 创建对象
@Test
	public void test3() {
		ApplicationContext act=new ClassPathXmlApplicationContext("classpath*:applicationContent.xml");
		MyContent p=act.getBean("chinese",MyContent.class);
		System.out.println(p.getContext());
		System.out.println(act==p.getContext());

                p=act.getBean("ZH",MyContent.class);
		System.out.println(p.getContext());
		System.out.println(act==p.getContext());

                p=act.getBean("CH",MyContent.class);
		System.out.println(p.getContext());
		System.out.println(act==p.getContext());

                p=act.getBean("ZG",MyContent.class);
		System.out.println(p.getContext());
		System.out.println(act==p.getContext());

                p=act.getBean("CN",MyContent.class);
		System.out.println(p.getContext());
		System.out.println(act==p.getContext());

                p=act.getBean("HH",MyContent.class);
		System.out.println(p.getContext());
		System.out.println(act==p.getContext());

	}


bean的作用域
<!--
singleton:默认值 单例模式
prototype:原型 每次都会创建对象
下面只在web中采用用 
request (prototype) :比如struts2中 action
session
global session: application
 -->
<!--原型  -->
	<bean id="userService2" class="cn.sh.springmvc.service.user.UserService" scope="prototype">
		<constructor-arg name="age" value="18" type="int"/>
                 <!--基本类型值  -->
		<property name="name" value="wawa"/>
		<property name="age" value="1"/>
                <!--douvle值  -->
		<property name="salary">
                     <value>2165.5</value>   
                </property>

                <!--注入嵌套bean 不让spring容器访问到  -->
                 <property name="userdao">
			<bean class="cn.sh.springmvc.dao.UserDAO"/>
		</property>
   
                <property name="userdao1" ref="userdao"/>
                
                 <property name="userdao2">
			<ref local="userdao"/>
		</property>

	</bean>


自动注入Bean
<!-- 此Bean不参与自动装配 -->
	<bean id="userdao" class="cn.sh.springmvc.dao.UserDAO" autowire-candidate="false"/>
	
	<bean id="userService3" class="cn.sh.springmvc.service.user.UserService" autowire="default">
		<property name="userdao" ref="userdao"/>
	</bean>
	<!-- 默认不在用自动 注入 -->
	<bean id="userService4" class="cn.sh.springmvc.service.user.UserService" autowire="no">
		<property name="userdao">
			<ref local="userdao"/>
		</property>
	</bean>
	
	<!-- 根据 setName()-->	
	<bean id="userService5" class="cn.sh.springmvc.service.user.UserService" autowire="byName">
	</bean>
	
	<!-- 根据 setName(Type type) 如果spring 容器中有多个 Type 的bean 会出异常 -->	
	<bean id="userService6" class="cn.sh.springmvc.service.user.UserService" autowire="byType">
	</bean>

	<!-- 根据 类中的构造函数进行装配 -->	
	<bean id="userService8" class="cn.sh.springmvc.service.user.UserService" autowire="constructor">
	</bean>
	
	<!--用于spring2.5 ,spring3.0  交给spring自动帮我我们抉择 是采用 constructor 或者 byType
	<bean id="userService9" class="cn.sh.springmvc.service.user.UserService" autowire="autodetect">
	</bean>
	-->


给bean注入集合属性

<bean id="chinese" class="cn.sh.springmvc.model.Chinese">
		<property name="schools">
			<list>
				<value>小学</value>
				<value>中学</value>
				<value>大学</value>
			</list>
		</property>
		<property name="scores">
			<map>
				<entry key="数学"><value>87</value></entry>
				<entry key="英语" value="89"/>
				<entry key="语文" value="82"/>
			</map>
		</property>
		<property name="phaseAxes">
			<map>
				<entry key="原始社会" value-ref="stoneAxe"/>
				<entry key="农业社会" value-ref="steelAxe"/>
			</map>
		</property>
		<!-- properties 设置 -->
		<!-- 
		<property name="health">
			<props>
				<prop key="血压">正常</prop>
				<prop key="身高">175</prop>
			</props>
		</property> -->
		<!-- properties 的另一种 设值方法  key value 只能是 英文和 数组-->
		<property name="health">
			<value>
				pressure=normal
				height=175
			</value>
		</property>
		<property name="axes">
			<set>
				<value>普通的字符串</value>
				<bean class="cn.sh.springmvc.model.SteelAxe"/>
				<ref local="stoneAxe"/>
			</set>
		</property>
		<property name="books">
			<list>
				<value>Struts2 权威指南</value>
				<value>轻量级JavaEE企业级应用</value>
				<value>疯狂java讲义</value>
			</list>
		</property>
		<property name="favourity">
			<array>
				<value>Struts2 权威指南</value>
				<value>轻量级JavaEE企业级应用</value>
				<value>疯狂java讲义</value>
			</array>
		</property>
	</bean>


Bean的组合属性赋值
<!--组合属性赋值  -->
	<bean id="userChild1" parent="userParent">
		<!--组合属性赋值的时候,只有最后一个属性可以为null,其他属性都不能为null  
			aa.bb.cc.dd : aa bb cc 都不能为null dd可以为null
		-->
		<property name="chinese.books">
			<array>
				<value>javaEE</value>
				<value>JS</value>
				<value>Oracle</value>
			</array>
		</property>
	</bean>


spring对Bea没有特殊要求,但是我们建议满足一下几个原则
1.尽量为每个Bean提供无参数构造函数
2.接受构造注入的Bean,应该提供构造函数
3.接受设值注入的bean,要提供setting方法,但并不要提供getter方法
4.Bean的id命名首字母尽量小写
分享到:
评论

相关推荐

    Spring--2.Spring 中的 Bean 配置-2-2

    Spring中的Bean可以有多种作用域,包括`singleton`(单例)、`prototype`(原型)、`session`(会话)、`request`(请求)等。`singleton`是最常见的一种,表示在整个应用中只有一个实例。`prototype`则每次请求...

    Spring Reference Core Technologies

    ##### 1.5 Bean作用域 - **1.5.1 单例作用域** 单例作用域是最常用的作用域之一,意味着在Spring IoC容器中只存在一个Bean实例。 - **1.5.2 原型作用域** 原型作用域意味着每次请求都会创建一个新的Bean实例。...

    spring core官方文档.pdf

    #### 四、Bean作用域 - **单一实例作用域(Singleton)** - 单个Bean定义在Spring IoC容器中只有一个实例。 - **原型作用域(Prototype)** - 每次请求都会创建一个新的实例。 - **单例Bean与原型Bean的依赖** ...

    SPRING面试宝典

    **3.5 Spring支持哪些Bean作用域?** Spring支持的作用域包括: - **singleton** - **prototype** - **request** - **session** - **globalSession** **3.6 Singleton Bean在Spring框架中是否线程安全?** ...

    Spring的经典面试题

    - **单例模式**:通过`singleton`作用域确保一个Bean在整个Spring IoC容器中只有一个实例。 - **代理模式**:用于实现AOP,通过动态代理技术实现。 - **装饰者模式**:通过Bean后处理器对Bean进行增强。 - **观察者...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步...

    spring framework 3 教程

    这种情况下,内部Bean通常采用singleton作用域。 #### 第十三章:Spring注入集合 - **注入集合类型:** - 可以将List、Set、Map等集合类型注入到Bean中。 #### 第十四章:Spring Bean自动注入 - **自动装配模式:...

    spring-developing-java-applications-enterprise

    - 注入集合类型:可以注入List、Set等集合类型。 - 注入内部bean:可以在一个bean中注入另一个完整的bean。 - 注入null和空字符串:Spring支持直接注入null和空字符串。 - **bean定义继承**:允许子bean继承父...

    Spring攻略(第二版 中文高清版).part1

    2.6 设置Bean作用域 69 2.6.1 问题 69 2.6.2 解决方案 69 2.6.3 工作原理 70 2.7 自定义Bean初始化和析构 72 2.7.1 问题 72 2.7.2 解决方案 72 2.7.3 工作原理 72 2.8 用Java Config简化XML配置 ...

    Spring攻略(第二版 中文高清版).part2

    2.6 设置Bean作用域 69 2.6.1 问题 69 2.6.2 解决方案 69 2.6.3 工作原理 70 2.7 自定义Bean初始化和析构 72 2.7.1 问题 72 2.7.2 解决方案 72 2.7.3 工作原理 72 2.8 用Java Config简化XML配置 ...

    Getting started with spring framwork.pdf

    - **Bean的作用域**:Spring框架提供了几种不同的Bean作用域,包括Singleton、Prototype等。选择合适的作用域对于内存管理和线程安全性至关重要。 #### 第三章:配置Bean - **Bean定义继承**:Bean定义可以继承...

    spring famework xml配置使用示例

    Bean可以有多种作用域,如单例(singleton)、原型(prototype)、请求(request)、session等。默认情况下,Bean是单例的: ```xml &lt;bean id="exampleBean" class=...

    spring2.5 学习笔记

    Spring的bean作用域(scope)定义了bean的生命周期,包括单例(singleton)、原型(prototype)等。懒加载(lazy-init)和默认的懒加载设置可以控制bean何时被初始化。另外,init-method和destroy-method用于指定bean的初始...

    Spring.3.x企业应用开发实战(完整版).part2

    4.8.3 Web应用环境相关的Bean作用域 4.8.4 作用域依赖问题 4.9 FactoryBean 4.10 基于注解的配置 4.10.1 使用注解定义Bean 4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命...

    spring学习笔记

    - **Bean的作用域**:定义Bean的生存周期,例如singleton(单例)、prototype(原型)等。 #### 四、Spring的AOP **面向切面编程(Aspect-Oriented Programming, AOP)**是一种编程范式,用于分离横切关注点...

    spring框架案例学习文档笔记.pdf

    文档详细介绍了如何通过XML配置文件进行setter注入和构造器注入,以及如何设置bean的id和name,简单属性的注入,bean的作用域(如singleton、prototype等),集合注入,以及自动装配(autowire)的方式,如byName和...

    tedu二阶段Spring全教程

    - **bean的作用域**:定义bean的生命周期,如singleton、prototype等。 - **bean的生命周期**:包括初始化和销毁的方法回调。 - **基于XML自动装配**:通过`autowire-candidate`属性实现自动装配。 #### 基于注解...

    Spring初学者入门教程

    5. **Bean的作用域**:Spring中的Bean可以有不同的作用域,如单例(Singleton)、原型(Prototype)等。 #### Bean的生命周期 Spring管理的Bean具有明确的生命周期,主要包括初始化和销毁两个阶段。 1. **初始化*...

    spring2.5_学习笔记.

    #### 第二课:JDOM 的基本使用 - **JDOM 介绍**:JDOM 是 Java Document Object Model 的缩写,是一种用于处理 XML 文件的轻量级工具包。 - **关键概念**:理解`Document`、`Element`、`Attribute`等基本元素及其...

Global site tag (gtag.js) - Google Analytics