首先说一说Component和Bean。
这两个注解的目的都是一致的:注册bean到spring容器当中。
区别在于用法,场景。
Component:用在类上的注解。
Bean:用在方法上的注解。
使用场景:一般情况下能使用Component注册到spring容器当中的,就会使用Component,什么时候Component不能使用了,这时候加上Bean。(当然一些场景两个注解都可以用。)
1、举例Component使用场景。
@Component
public class AnnoConfig {
public String sayHello() {
return "Hello!";
}
}
@Autowired
private AnnoConfig annoConfig;
@GetMapping("/sayHello")
public void sayHello() {
System.out.println(annoConfig.sayHello());
}
2、举例Component注解替换为Component和Bean组合的使用场景。
@Component
public class AnnoConfig {
@Bean
public AnnoConfig getAnnoConfig() {
return new AnnoConfig();
}
}
@Autowired
private AnnoConfig getAnnoConfig;
@GetMapping("/sayHello")
public void sayHello() {
System.out.println(getAnnoConfig.sayHello());
}
3、只能使用Component和bean组合的场景
当需要将第三方类库注入spring容器时。
接着说一说Configuration和Bean。
Configuration注解写的位置和Component基本一致,就不贴代码了,但是底层运行有着本质的区别。
这个链接地址的博主说的也很清楚。
https://blog.csdn.net/long476964/article/details/80626930
Component不会为其生成CGLIB代理Class,每次执行方法的时候,就会new一次对对象。(每次都是不同的对象)
Configuration注解使用时,会生成当前对象的子类Class,并对方法拦截,第二次调用car()方法时直接从BeanFactory之中获取对象,所以得到的是同一个对象。(动态代理)
网友评论