在spring项目中经常会用到的两个注解对于初学者会分不清该用哪个
首先@Bean和@Autowired是干啥的呢?
1、@Bean的注解就是替代我们之前配置spring的XML文件里面的的,毕竟按照配置文件的方式,在Java文件上用写代码写个bean,然后再去XML文件通过注册,来回操作太麻烦,直接在当前用到的直接写。
2、@Autowired自动装配指的就是使用将 Spring 容器中的 bean 自动的和我们需要这个 bean 的类组装在一起。
区别
@Bean 修饰的方法表示初始化一个对象并交由Spring IOC去管理,@Bean 只能和@Component @Repository @Controller @Service @Configration 配合使用.
@Autowired 可修饰变量和方法,用于完成自动装配(将需要的外部资源注入) 说白了,自动装配的前提你要先有才能装配,你直接引用资源就行,没有相当于白扯
@Autowired可以用在(spring官网例子)
1.应用于构造函数
public class MovieRecommender {
private final CustomerPreferenceDao customerPreferenceDao;
@Autowired
public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
2.传统的 setter 方法
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Autowired
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}
3.应用于具有任意名称和多个参数的方法
public class MovieRecommender {
private MovieCatalog movieCatalog;
private CustomerPreferenceDao customerPreferenceDao;
@Autowired
public void prepare(MovieCatalog movieCatalog,
CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieCatalog;
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
4.应用于字段,甚至可以将其与构造函数混合
public class MovieRecommender {
private final CustomerPreferenceDao customerPreferenceDao;
@Autowired
private MovieCatalog movieCatalog;
@Autowired
public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
等等我这里不一一列举了详细查看spring官网 Using @Autowired
总结:
@Bean和@Autowired都是常用的注解但@Bean是将没有的注入到spring容器中@Autowired是将spring容器中已有的自动装配(组合)到另一个类中