Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType。然后,如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配,它将尝试匹配和连接它的属性。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。
在配置文件中,如果一个 bean 定义设置为自动装配 byType,并且它包含 SpellChecker 类型的 spellChecker 属性,那么 Spring 就会查找定义名为 SpellChecker 的 bean,并且用它来设置这个属性。你仍然可以使用 标签连接其余属性。
看个例子:
TextEditor:
public class TextEditor { private SpellChecker spellChecker; private String name; public void setSpellChecker( SpellChecker spellChecker ) { this.spellChecker = spellChecker; } public SpellChecker getSpellChecker() { return spellChecker; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void spellCheck() { spellChecker.checkSpelling(); }}
正常情况下beans.xml里的显式装配:
![c4190c1d529aafef98716bfa77b7a524.png](https://i-blog.csdnimg.cn/blog_migrate/bfe5ccf51cb96793ccce526ded0bd3c2.jpeg)
采用by Name自动装配的beans.xml写法:
<?xml version="1.0" encoding="UTF-8"?>
可以看到,在by Type自动装配模式下,beans.xml里的spellChecker bean的ID可以随便取,因为这个属性是为by Name装配模式服务的,在by Type模式下忽略。