Spring 中的 Autowired Annotation
@Autowired注解是实现依赖注入的一种相对较新的风格,它允许我们将其他bean注入另一个所需的bean中。与@Required注释类似,@Autowired注释可用于setter方法以及构造函数和属性上的“autowire”bean。。
@Setter方法的Autowired注释
请注意,在setter方法上使用@Autowired注释时,它会自动获取驻留在XML配置文件中的*<property>*元素的rid。相反,当Spring发现一个使用@Autowired注释的setter方法时,它会对该特定方法执行一个 byType“autowiring”。
让我们来练习一下。更具体地说,@Autowired在setter方法上。
示例服务.java
public class ExampleService { private Employee employee; @Autowired public void setEmployee(Employee emp) { //setting the employee employee = emp; } }
故障
上面的例子没有什么特别之处。我们只有一个名为 ExampleService的服务类,它有一个类型为 Employee的实例变量,并且有一个名为 setEmployee(Employee emp)的setter方法,它只将Employee设置为任何作为参数的值。
由于@Autowired注释,在实例化ExampleService时,Employee的一个实例作为参数被注入到该方法中。
@构造器自动连线注解
public class ExampleService { private Employee employee; @Autowired public ExampleService(Employee employee) { this.employee = employee; } @Autowired public void setEmployee(Employee emp) { //setting the employee employee = emp; } }
再一次,由于@Autowired注释,Employee的一个实例在实例化ExampleService时被注入构造函数作为参数。
@Autowired属性注释
自动布线特性节省了我们的时间和代码行。怎样?当我们在属性上使用那个注释时,这些属性不再需要getter和setter。很酷吧?
public class ExampleService { @Autowired private Employee employee; @Autowired public ExampleService(Employee employee) { this.employee = employee; } @Autowired public void setEmployee(Employee emp) { //setting the employee employee = emp; } }
在上面的代码片段中,我们自动连接了名为 employee的属性。因此,它不再需要setter和getter方法。* employee*在ExampleService创建时被Spring注入。
可选依赖关系
@自动连线也可以是可选的。是这样的:
public class ExampleService { @Autowired(required = false) private Employee employee; @Autowired public ExampleService(Employee employee) { this.employee = employee; } @Autowired public void setEmployee(Employee emp) { //setting the employee employee = emp; } }
required=false使其不是必需的依赖项。
我们需要可选依赖项的原因是,Spring希望在构建依赖bean时,@Autowired的依赖项是可用的。否则,它将抛出一个错误。多亏了 required=false,我们解决了这个问题。