(笔记)Spring实战_装配Bean(2)_注入Bean属性
2016-09-24 20:47
555 查看
Spring可以借助属性的set方法来配置属性的值,以实现setter方式的注入。
1.注入简单值
注意value属性的使用,为它设置数字类型的值和设置String类型的值并没有任何不同。Spring将根据Bean属性的类型自动判断value值的正确类型。
2.引入其他Bean
内部Bean
内部Bean是通过直接声明一个
内部Bean并不仅限于setter注入,我们还可以把内部Bean装配到构造方法的入参中。
内部Bean仅适用于一次注入,而且也不能被其他Bean所用。
3.使用Spring的命名空间p装配属性
需要在Spring的XML配置中增加如下一段声明:
当装配类型为数组或者java.util.Collection任意实现的属性时,
装配List、Set和Array
还可以使用其他的Spring设值元素作为
如果Bean的属性类型为数组类型或java.util.Collection接口的任意实现,都可以使用
再次说明,无论
需要确保List中的每一个成员都必须是唯一的。
装配Map集合
装配Properties集合
5.装配空值
package com.springinaction.springidol; public interface Instrument { public void play(); }
package com.springinaction.springidol; public class Instrumentalist implements Performer { public void perform() { System.out.println("Playing " + song + " : "); instrument.play(); } private String song; // 注入歌曲 public void setSong(String song) { this.song = song; } private Instrument instrument; // 注入乐器 public void setInstrument(Instrument instrument) { this.instrument = instrument; } }
<bean id="kenny" class="com.springinaction.springidol.Instrumentalist" />
1.注入简单值
<bean id="kenny" class="com.springinaction.springidol.Instrumentalist"> <property name="song" value="Jingle Bells" /> </bean>
<property>元素并没有限制只能注入String类型的值,value属性同样可以指定数值类型(int、float、java.lang.Double等)以及boolean型的值。
注意value属性的使用,为它设置数字类型的值和设置String类型的值并没有任何不同。Spring将根据Bean属性的类型自动判断value值的正确类型。
2.引入其他Bean
package com.springinaction.springidol; public class Saxophone implements Instrument { public Saxophone() { } public void play() { System.out.println("TOOT TOOT TOOT"); } }
<bean id="kenny" class="com.springinaction.springidol.Instrumentalist"> <property name="song" value="Jingle Bells" /> <property name="instrument" ref="saxophone" /> </bean> <bean id="saxophone" class="com.springinaction.springidol.Saxophone" />
内部Bean
<bean id="jenny" class="com.springinaction.springidol.Instrumentalist"> <property name="song" value="Jingle Bells" /> <property name="instrument"> <bean class="com.springinaction.springidol.Saxophone" /> </property> </bean>
内部Bean是通过直接声明一个
<bean>元素作为
<property>元素的子节点而定义的。
内部Bean并不仅限于setter注入,我们还可以把内部Bean装配到构造方法的入参中。
<bean id="poeticBuke" class="com.springinaction.springidol.PoeticJuggler"> <constructor-arg value="15" /> <constructor-arg> <bean class="com.springinaction.springidol.Sonnet29" /> </constructor-arg> </bean>
内部Bean仅适用于一次注入,而且也不能被其他Bean所用。
3.使用Spring的命名空间p装配属性
需要在Spring的XML配置中增加如下一段声明:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">[/code]<bean id="henny" class="com.springinaction.springidol.Instrumentalist" p:song="Jingle Bells" p:instrument-ref="saxophone" />
-ref后缀作为一个标识来告知Spring应该装配一个引用而不是字面量。
4.装配集合
集合元素 | 用途 |
---|---|
<list> | 装配list类型的值,允许重复 |
<set> | 转配set类型的值,不允许重复 |
<map> | 装配map类型的值,名称和值可以是任意类型 |
<props> | 装配properties类型的值,名称和值必须都是String类型 |
<list>和
<set>元素非常有用。
<map>和
<props>这两个元素分别对应java.util.Map和java.util.Properties。
package com.springinaction.springidol; import java.util.Collection; public class OneManBand implements Performer { public OneManBand() { } public void perform() { for (Instrument instrument : instruments) { instrument.play(); } } private Collection<Instrument> instruments; public void setInstruments(Collection<Instrument> instruments) { this.instruments = instruments; } }
装配List、Set和Array
<bean id="hank" class="com.springinaction.springidol.OneManBand"> <property name="instruments"> <list> <ref bean="piano" /> <ref bean="saxophone" /> </list> </property> </bean>
<ref>元素用来定义Spring上下文中的其他Bean引用。
还可以使用其他的Spring设值元素作为
<list>的成员,包括
<value>、
<bean>和
<null/>。实际上,
<list>可以包含另外一个
<list>作为其成员,形成多维列表。
如果Bean的属性类型为数组类型或java.util.Collection接口的任意实现,都可以使用
<lsit>元素:
private java.util.List<Instrument> instruments;和
private Instrument[] instruments;
再次说明,无论
<list>还是
<set>都可以用来装配类型为java.util.Collection的任意实现或者数组的属性。不能因为属性为java.util.Set类型,就表示用户必须使用
<set>元素来完成装配。
需要确保List中的每一个成员都必须是唯一的。
<bean id="tank" class="com.springinaction.springidol.OneManBand"> <property name="instruments"> <set> <ref bean="piano" /> <ref bean="saxophone" /> <ref bean="piano" /> </set> </property> </bean>
装配Map集合
package com.springinaction.springidol; import java.util.Map; public class OneManOrch implements Performer { public OneManOrch() { } public void perform() { for (String key : instruments.keySet()) { System.out.print(key + ":"); Instrument instrument = instruments.get(key); instrument.play(); } } private Map<String, Instrument> instruments; public void setInstruments(Map<String, Instrument> instruments) { this.instruments = instruments; } }
<bean id="gank" class="com.springinaction.springidol.OneManOrch"> <property name="instruments"> <map> <entry key="PIANO" value-ref="piano" /> <entry key="SAXOPHONE" value-ref="saxophone" /> </map> </property> </bean>
属性 | 用途 |
---|---|
key | 指定map中entry的键为String |
key-ref | 指定map中entry的键为Spring上下文中其他Bean的引用 |
value | 指定map中entry的值为String |
value-ref | 指定map中entry的值为Spring上下文中其他Bean的引用 |
package com.springinaction.springidol; import java.util.Iterator; import java.util.Map.Entry; import java.util.Properties; public class OneManOrchestra implements Performer { public OneManOrchestra() { } public void perform() { Iterator<Entry<Object, Object>> it = instruments.entrySet().iterator(); while (it.hasNext()) { Entry<Object, Object> entry = it.next(); Object key = entry.getKey(); Object value = entry.getValue(); System.out.println(key + ":" + value); } } private Properties instruments; public void setInstruments(Properties instruments) { this.instruments = instruments; } }
<bean id="mank" class="com.springinaction.springidol.OneManOrchestra"> <property name="instruments"> <props> <prop key="PINAO">PLINK PLINK PLINK</prop> <prop key="SAXOPHONE">TOOT TOOT TOOT</prop> </props> </property> </bean>
5.装配空值
<property name="someNonNullPro a4af perty"><null/></property>
相关文章推荐
- Spring4 实战笔记(1):装配bean—依赖注入的本质
- spring实战一:装配bean之注入Bean属性
- (笔记)Spring实战_最小化Spring XML配置(1)_自动装配Bean属性
- Spring学习笔记--注入Bean属性
- (笔记)Spring实战_装配Bean(3)_使用表达式装配
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
- spring4笔记----使用装配注入合作者Bean的三种方式
- spring in action 学习笔记(六)通过setter注入bean属性
- Spring实战笔记——装配Bean
- (笔记)Spring实战_装配Bean(1)_声明Bean
- [Java] Spring 3.0 /id.vs.name/简单属性的注入/bean中的scope属性/集合注入/自动装配/生命周期/
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
- [学习笔记]spring实战-装配Bean
- Spring实战-注入Bean属性(二)
- 【JavaEE学习笔记】Spring_02_IoC/DI依赖注入,集合对象属性注入,自动装配,代理模式
- Spring实战2:装配bean—依赖注入的本质
- Spring实战2:装配bean—依赖注入的本质
- Spring4 实战笔记(2):装配bean的进阶知识
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
- spring笔记——bean自动装配的5种模式(autowrite属性)