Spring依赖注入的方式有x种,具体实现分为注解实现和xml实现,两者是类似的,都是保存了类之间的依赖关系。但使用注解通常更加方便。
下面我以为A对象注入其属性B为例介绍各种注入方式。
public class A{
private B ab;
}
setter方法注入
- 使用属性的setter方法注入 ,这是最常用的方式
- 属性注入即通过setXxx方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式。
xml配置
public class A{
private B ab;
写好set方法
public void setab(B ab){
this.ab = ab;
}
}
b注册为bean
<bean id="b" class="B"> </bean>
为a注入依赖
<bean id="a" class="A">
<property name="ab" ref="b"/>
</bean>
注解配置
public class A{
private B ab;
注解自动装配
@Autowired
public void setab(B ab){
this.ab = ab;
}
}
构造器注入
构造函数注入是除属性注入之外的另一种常用的注入方式,它保证一些必要的属性在Bean实例化时就得到设置,并且确保了Bean实例在实例化后就可以使用。
xml配置
public class A{
private B ab;
构造方法注入
public A(B ab){
this.ab = ab;
}
}
b注册为bean
<bean id="b" class="B"> </bean>
为a注入依赖
<bean id="a" class="A">
<constructor-arg type="B" ref="b"></constructor-arg>
</bean>
注解配置
public class A{
private B ab;
注解自动装配
@Autowired
public A(B ab){
this.ab = ab;
}
}
属性注入
- 无需set方法
- 尽可以用于注解方式
public class A{
@Autowired
private B ab;
}
在Java代码中可以使用@Autowired
或@Resource
注解方式进行Spring的依赖注入。两者的区别是:
@Autowired默认按类型装配
@Resource默认按名称装配,当找不到与名称匹配的bean时,才会按类型装配。