@Component与@Bean的区别
创建对象的区别
待补入此博客。
通过@Component创建对象
向Spring容器中注入对象
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {
private String name;
private Integer age;
}
然后通过@Autowired从容器中取出对象
@Autowired
private User user;
通过@Bean创建对象
向Spring容器中创建对象,@Bean注解必须要在标有@Configuration的配置类中使用才会有效。
@Configuration
public class MyConfiguration {
@Bean
public User user() {
return new User();
}
}
然后通过@Autowired从容器中取出该对象
@Autowired
private User user;
@Bean的优势
使用外部引入的lib中的组件(比如jar包)
使用@Component注解标注到别人的源码上面?显然这是不现实的,这个时候@Bean就可以发挥其优势了。以下方创建jar包中的一个User类为例。
@Configuration
public class MyConfiguration {
@Bean
public ArrayList<User> list() {
ArrayList<User> list = new ArrayList<>();
list.add(new User("nacy", 17));
return list;
}
}
根据条件来注入组件
@Configuration
public class MyConfiguration {
@Bean
public User user() {
int i = 10;
if(i < 7) {
return new User("jack", 20);
} else {
return new User("david", 18);
}
}
}