spring实战-自动装配bean

时间:2022-10-26 20:33:40

如果采用显式的装配所有bean,可能会觉得会配置很多的bean,spring定义了一套自动装配bean的方式,减轻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" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd"
default-autowire="byName">
<!-- 以上配置默认自动装配方式 -->

<!-- 自动装配有四种类型:byType,buName,constructor -->

<bean id="proxyInfo" class="com.halfworlders.proxy.ProxyInfo"
primary="false">
<property name="ip" value="127.0.0.0"></property>
</bean>

<!-- 如果采用autowire="byType"模式自动装配,为了避免因为多个同类型抛出异常,可以采用primary属性,但是primary比较怪异的时,默认为true,所以需要把除了期望首选装配的bean以外,把其他bean设置为false -->
<bean id="proxyInfo1" class="com.halfworlders.proxy.ProxyInfo"
primary="true">
<property name="ip" value="127.0.0.1"></property>
</bean>

<!-- autowire-candidate="false"取消bean装配的的候选资格 -->
<bean id="proxyInfo2" class="com.halfworlders.proxy.ProxyInfo"
autowire-candidate="false">
<property name="ip" value="127.0.0.2"></property>
</bean>

<!-- autowire="byName"为属性自动装配ID与该属性的名字相同的Bean -->
<bean id="connection" class="com.halfworlders.web.Connection"
autowire="byName" primary="true">
</bean>

<!-- autowire="byType"如果有多个同类型bean,byType会抛出异常,可以采用两种方式避免:1,为自动装配的Bean设置首选;2,取消bean装配的的候选资格 -->
<bean id="connection1" class="com.halfworlders.web.Connection"
autowire="byType" primary="false">
</bean>

<bean id="timeOut" class="java.lang.Integer">
<constructor-arg value="5"></constructor-arg>
</bean>

<!-- autowire="constructor"和byType具有相同的局限性,当发现多个同类型bean时会报异常,同时如果被装配的Bean有多个构造器时,系统默认使用参数最多的一个构造函数 -->
<bean id="connection2" class="com.halfworlders.web.Connection"
autowire="constructor">
</bean>

<!-- autowire在装配属性是可以和显式的属性装配<property>混合使用,但是在constructor自动装配时不能和<constructor-arg>混合使用 -->
</beans>


以上使用的所有类,见上篇文章点击打开链接