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实战(第三版)的学习笔记