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

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攻略(第二版 中文高清版).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配置 ...

    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.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作用范围及生命...

    Spring3.x企业应用开发实战(完整版) part1

    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作用范围及生命...

    低清版 大型门户网站是这样炼成的.pdf

    6.2.4 bean的作用域与生命周期 374 6.2.5 基于xml方式的bean装配 376 6.2.6 基于annotation方式的bean装配 381 6.2.7 基于xml方式的aop实现 386 6.2.8 基于annotation方式的aop实现 391 6.3 spring 2.5事务管理...

    Java常见面试题208道.docx

    96.spring 支持几种 bean 的作用域? 97.spring 自动装配 bean 有哪些方式? 98.spring 事务实现方式有哪些? 99.说一下 spring 的事务隔离? 100.说一下 spring mvc 运行流程? 101.spring mvc 有哪些组件? 102.@...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

    java面试题

    有第二分支,多分支,循环结构。循环本质上也是通过判断来实现的。 多形与继承? 答:多形:一个类中多个同名方法。继承:子类继承父类。 jsp内置对象? 答:request 用户端请求 response 回应 pageContext 网页...

    最新Java面试宝典pdf版

    17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可继承...

    Java面试宝典2010版

    17、请说出作用域public,private,protected,以及不写时的区别 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 19、构造器Constructor是否可被override? 20、接口是否可继承接口? ...

    Java面试笔试资料大全

    17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可继承...

    JAVA面试宝典2010

    17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可继承...

    Java面试宝典2012版

    17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可...

    Java面试宝典-经典

    17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可继承...

    java面试题大全(2012版)

    17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可继承...

    java面试宝典2012

    17、请说出作用域public,private,protected,以及不写时的区别 14 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 15 19、构造器Constructor是否可被override? 16 20、接口是否可继承...

Global site tag (gtag.js) - Google Analytics