1. @AutoWired的使用
@Service
public class MyService {
@Autowired
private MyDao myDao;
}
1.1 自动装配首先时按照类型进行装配,若在IOC容器中发现了多个相同类型的组件,那么就按 属性名称来进行装配
@Configuration
@ComponentScan(value = {"com.dgr.annotation.autowired"})
public class MainConfig {
@Bean
public MyDao myDao() {
MyDao myDao = new MyDao();
myDao.setFlag(0);
return myDao;
}
@Bean
public MyDao myDao1() {
MyDao myDao = new MyDao();
myDao.setFlag(1);
return myDao;
}
}
@Service
public class MyService {
@Autowired
private MyDao myDao;
@Override
public String toString() {
return "MyService{" +
"myDao=" + myDao +
'}';
}
}
@Service
public class MyAnotherService {
@Autowired
private MyDao myDao1;
@Override
public String toString() {
return "MyAnotherService{" +
"myDao1=" + myDao1 +
'}';
}
}
1.2 假设我们需要指定特定的组件来进行装配,我们可以通过使用@Qualifier(“MyDao”) 来指定装配的组件
@Service
public class MyAnotherService {
// 设置required = false 避免因为找不到myDao而报错
@Autowired(required = false)
@Qualifier(value = "myDao")
private MyDao myDao1;
@Override
public String toString() {
return "MyAnotherService{" +
"myDao1=" + myDao1 +
'}';
}
}
1.3 使用autowired 可以标注在方法上
标注在set方法上
@Autowired
public void setMyDao(MyDao myDao) {
this.myDao = myDao;
}
标注在构造方法上
@Autowired
public MyService(MyDao myDao) {
this.myDao = myDao;
}
标注在配置类上的入参中(可以不写)
@Bean
public MyService myService(@Autowired MyDao myDao) {
return new MyService(myDao);
}
2. :@Resource(JSR250规范)注解
功能和@AutoWired的功能差不多一样,但是不支持@Primary 和@Qualifier的支持
3. @InJect(JSR330规范)
需要引入依赖
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
功能和支持@Primary功能 ,但是没有Require=false的功能