- @Autowired @Qualifier @Primary spring框架定义的
@Service
public class BookService {
//4.自动装配默认一定要将属性赋值,可以使用required = false避免
//2.@Autowired 如果找到多个相同类型的组件,ioc容器会将其属性名作为组件的id进行查找 context.getBean("bookDao2");
@Qualifier("bookDao") //3.使用@Qualifier指定装配的组件id,而不是使用属性名当id查找
@Autowired(required = false) //1.@Autowired默认优先按照类型去找对应的组件,找到之后赋值给变量,相当于:bookDao = context.getBean(BookDao.class);
private BookDao bookDao2;
public void printBookDao(){
System.out.println(bookDao2);
}
}
@Configuration
@ComponentScan(value = {"com.zyn.dao","com.zyn.service","com.zyn.controller"})
public class MainConfigOfAutowired {
@Primary // 让spring进行自动装配时,默认使用首选的bean,不过也可以继续使用@Qualifier指定spring装配bean的id
@Bean("v22")
public BookDao bookDao2(){
BookDao bookDao = new BookDao();
bookDao.setLabel("2");
return bookDao;
}
}
-
可以再注解@Repository,@Bean中给装配的bean起名字,spring容器会通过此名字来查找容器中的bean对象。
-
@PropertySource @Value
- @PropertySource(value = {“classpath:person.properties”}) //通过此注解来加载properties配置文件,可以配合@Value使用 @Value("${person.name}")
- @Resource @Inject 属于Java出的规范
- 两者都可以完成自动装配,@Resource默认按照组件名称进行装配,可以完成和@Autowired一样的自动装配功能,没有支持@Primary功能,也没有支持@Autowired(required = false)功能。
- @Inject注解和@Autowired的功能一样,但是需要导入javax.inject依赖,没有支持@Autowired(required = false)功能。