Spring自动装配中属性注入的三种实施方式
在Spring框架中,自动装配是一种让Spring容器自动满足依赖关系的机制。属性注入是Spring中常用的一种依赖注入方式,主要有以下三种实施方式:
使用
@Autowired
注解:@Autowired
注解是最常用的自动装配方式。它可以在字段、构造器和setter方法上使用。Spring会自动寻找与当前属性类型兼容的bean进行注入。public class MyService {
@Autowired
private MyRepository myRepository;
// 构造函数注入
// @Autowired
// public MyService(MyRepository myRepository) {
// this.myRepository = myRepository;
// }
// 或者使用setter方法注入
// @Autowired
// public void setMyRepository(MyRepository myRepository) {
// this.myRepository = myRepository;
// }
}
使用
@Resource
注解:@Resource
注解是来自Java EE的标准注解,它可以用于字段或setter方法上,从而使开发者可以通过名称或类型注入bean。因此,它同时支持按名称和按类型装配。import javax.annotation.Resource;
public class MyService {
@Resource(name="myRepository") // 可以指定名称
private MyRepository myRepository;
// 或者使用setter方法注入
// @Resource
// public void setMyRepository(MyRepository myRepository) {
// this.myRepository = myRepository;
// }
}
使用
@Inject
注解:@Inject
注解是由JSR-330引入的,它和@Autowired
的功能非常类似。在Spring中,它也可以用于字段、构造器和setter方法上自动装配bean。import javax.inject.Inject;
public class MyService {
@Inject
private MyRepository myRepository;
// 构造函数注入
// @Inject
// public MyService(MyRepository myRepository) {
// this.myRepository = myRepository;
// }
// 或者使用setter方法注入
// @Inject
// public void setMyRepository(MyRepository myRepository) {
// this.myRepository = myRepository;
// }
}
这三种方式在实际开发中的差别主要在于其来源(@Autowired
是Spring独有的,而@Resource
和@Inject
是标准的Java规范注解),选择使用哪一种注解通常取决于项目的规范和团队的习惯。