1、@Autowired 可以用在多个地方,在 setter 方法上,属性上 或者 带有多个参数的任意方法上。
Setter 方法中的 @Autowired.
当 Spring遇到一个在 setter 方法中使用的 @Autowired 注释,它会在方法中视图执行 byType 自动连接。
java
public class TextEditor { private SpellChecker spellChecker; @Autowired public void setSpellChecker( SpellChecker spellChecker ){ this.spellChecker = spellChecker; } }
Bean.xml
<?xml version="1.0" encoding="UTF-8"?> <beans> <context:annotation-config/> <bean id="textEditor" class="com.tutorialspoint.TextEditor"></bean> <bean id="spellChecker" class="com.tutorialspoint.SpellChecker"></bean> </beans>
属性中的 @Autowired
在属性中使用 @Autowired 注释来除去 setter 方法。Spring 会将这些传递过来的值或者引用自动分配给那些属性。
java
public class TextEditor { @Autowired private SpellChecker spellChecker; }
Bean.xml同上。
构造函数中的 @Autowired
构造函数使用 @Autowired 说明当创建 bean 时,可以消除在 XML 文件中的构造函数配置。
java
public class TextEditor { private SpellChecker spellChecker; @Autowired public TextEditor(SpellChecker spellChecker){ this.spellChecker = spellChecker; } }
Bean.xml同上。
@Autowired 的(required=false)选项
默认情况下,@Autowired 注释意味着依赖是必须的,它类似于 @Required 注释,然而,你可以使用 @Autowired 的(required=false) 选项关闭默认行为。
即使你不为 age 属性传递任何参数,下面的示例也会成功运行,但是对于 name 属性则需要一个参数。
java
public class Student { private Integer age; private String name; @Autowired(required=false) public void setAge(Integer age) { this.age = age; } public Integer getAge() { return age; } @Autowired public void setName(String name) { this.name = name; } public String getName() { return name; } }