Spring 容器可以在不使用和 元素的情况下自动装配相互协作的 bean 之间的关系,这有助于减少编写一个大的基于 Spring 的应用程序的 XML 配置的数量。
By Name
使用By Name进行自动装配,beans.xml如下:
<?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">
<!-- Definition for textEditor bean -->
<bean id="textEditor" class="com.tutorialspoint.TextEditor"
autowire="byName">
<property name="name" value="Generic Text Editor" />
</bean>
<!-- Definition for spellChecker bean -->
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
</bean>
</beans>
在配置文件中,如果一个 bean 定义设置为自动装配 byName,并且它包含 spellChecker 属性(即,它有一个 setSpellChecker(…) 方法),那么 Spring 就会查找ID为 spellChecker 的 bean,(叫byID更准确点)并且用它来设置这个属性。仍然可以使用 标签连接其余的属性。
输出:
如果把beans.xml的SpellChecker的ID改为SpellChecker2,则运行时会报NullPointerException:
如果非要将就beans.xml里的spellChecker2, 则TextEditor类里所有出现spellChecker的地方,都要改成spellChecker2才能正常工作。只改成员变量名不行。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":