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