首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Spring学习札记 使用XML配置实现Bean的auto-wiring (自动绑定)

2012-08-08 
Spring学习笔记 使用XML配置实现Bean的auto-wiring (自动绑定)Spring在配置过程中可以实现Bean的引用类型

Spring学习笔记 使用XML配置实现Bean的auto-wiring (自动绑定)

Spring在配置过程中可以实现Bean的引用类型属性与其他已定义好的Bean的自动关联,除了可以减少手工输入外,还可以实现应用的动态构建。不过大多数时候需要整个应用遵循特定的开发规则与命名规则,否则很容易造成程序难于理解与混乱。很多人更愿意多做点工作也不愿意造成代码调试的困难。如果要实现自动关联,很简单,XML配置方式只需要在Bean标签中加入autowire属性即可。而且这种关联不仅仅限制与Bean的属性,对于Bean的构造方法的参数也可以实现自动关联。

以下是用来示例的两个类,MessageLooper中有一个Message类型的引用属性。

Spring学习札记 使用XML配置实现Bean的auto-wiring (自动绑定)

XML配置autowire属性有5个模式可以选择:

1.no 即不进行自动关联

2.byName通过具有与property(属性)名相等id或name值的Bean进行关联。如果没有发现可以关联的Bean,则使property值留空(null)。

3.byType通过具有与property(属性)相同类型的Bean进行关联。如果没有发现可以关联的Bean,则使property属性值留空(null),如果发现多个匹配的Bean则会抛出 org.springframework.beans.factory.UnsatisfiedDependencyException异常。

4.constructor通过byType模式对构造方法中的参数进行关联。如果有多个构造函数,则匹配参数个数最多的构造函数。

5.autodetect优先使用constructor模式进行关联,没有可以关联的构造方法则是用byType模式进行关联。在spring3中已经放弃使用autodetect模式。

 

要实现MessageLooper中对Message类型属性的自动关联,请看以下XML中messageLooper的Bean定义:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    <!--  <bean id="messageLooper" class="autowiring.MessageLooper" autowire="byType" >                <property name="message" ref="message" /> //此处为使用手动关联的代码          </bean>     -->     <bean id="messageLooper" class="autowiring.MessageLooper" autowire="byName" />        <bean id="message" class="autowiring.Message" >        <property name="messageContent" value="How are you?" />    </bean></beans>

 

对于byType模式与constructor模式如果有多个可以匹配的Bean存在,又想使自动匹配成功,可以在符合匹配条件但又不想被匹配的Bean中加入 autowire-candidate="false",如下:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    <bean id="messageLooper" class="autowiring.MessageLooper" autowire="byType" />        <bean id="message" class="autowiring.Message" >        <property name="messageContent" value="How are you?" />    </bean>    <bean id="message2" class="autowiring.Message" autowire-candidate="false" >        <property name="messageContent" value="How are you ???" />    </bean>    </beans>


这样message2就不会参与匹配,这样也不会因为有多个符合匹配的Bean而抛出异常。


 

热点排行