Spring装配bean

       在Spring中,对象无需自己负责创建和管理对象。相反,容器负责把需要相互协作的对象引用赋予各个对象。这样对象自身就可以从对象的管理中解脱出来,从而可以实现解耦。创建应用对象之间协作关系的行为通常被称为装配。这也是依赖注入的本质。依赖注入是Spring使用的基本要素,因此在开发基于Spring的应用时,这些技术无时无刻不在被使用着。

        Spring是一个基于容器的框架。但是如果没用相应的配置的话,那么就相当于是一个空容器。一个空的容器是没有实际用处的。所以我们需要通过配置来告诉容器它需要加载那些Bean并且如何装配这些bean。虽然sping提供了两种配置方式,但基于xml文件的配置是spring最原始的配置方式,虽然在大型项目中其配置将变得相当的庞大。但简单的项目使用这种方法还是可以达到可读性好的优点的。

       装配的一个重要目的就是,将想要的值注入到相应Bean的属性中。依据注入的方法可以将他们分成两类。构造器注入和setter方式的注入(命名空间p)。依据内容可以分成五类。简单值,引用,集合,内部bean,SPEL表达式。

构造器注入简单值

<bean id="duke" class="org.spring.chapter2.Juggler">
	<constructor-arg value="15" />

 使用xml <constructor-arg>标签的value属性通过Juggler类的构造方法注入简单值“15”

构造器注入引用

<bean id="sonnet29"
	class="org.spring.chapter2.Sonnet29" />
	
<bean id="poeticDuke" class="org.spring.chapter2.PoeticJuggler">
	<constructor-arg value="15" />
	<constructor-arg ref="sonnet29" />

  使用xml <constructor-arg>标签的ref属性通过PoeticJuggler类的构造方法注入sonnet29的引用。

setter方式注入简单值和引用

<bean id="piano" class="org.spring.chapter2.Piano" />

<bean id="kenny"
	class="org.spring.chapter2.Instrumentalist">
<property name="song" value="Jingle Bells" />
<property name="instrument" ref="piano" />

</bean>

 使用xml<property>的name和value属性指定bean的属性的值,需要bean中有相应的setXXX()方法。

setter方式注入简单值和引用(命名空间p)

<bean id="saxophone" class="org.spring.chapter2.Saxophone" />
<bean id="dan" class="org.spring.chapter2.Instrumentalist"
p:song = "Jingle Bells"
p:instrument-ref = "saxophone"
/>

 可以简化配置,但需在beans中声明相应的命名空间

setter方式注入列表

<bean id="saxophone" class="org.spring.chapter2.Saxophone" />
<bean id="piano" class="org.spring.chapter2.Piano" />
	
<bean id="hank" class="org.spring.chapter2.OneManBand">
	<property name = "instruments">
		<list>
			<ref bean="saxophone" />
			<ref bean="piano" />
		</list>
	</property>
</bean>

注:Spring实战(第三版)的学习笔记

相关推荐