首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
【一句话】@Configuration和@Component的区别
返回列表
发新帖
【一句话】@Configuration和@Component的区别
[复制链接]
发表于 2023-2-9 21:14:17
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
首先一句话:
@Configuration修饰的类会被Cglib动态代理,@Component不会。
详细:
Cglib动态代理生成当前对象的子类Class,并对方法拦截,多次调用@Bean方法时直接从BeanFactory之中获取,得到同一个对象。
即使用@Configuration时
@Autowired自动注入的对象和直接调用@Bean修饰的方法及多次调用@Bean修饰的方法拿到的是同一个对象。
当然,多个@Autowired自动注入的对象不管使用哪个注解拿到的都是同一个对象哈,因为默认是单例的嘛
看个例子就好理解了:
@Configuration
// @Component
public class Test {
@Bean
public A a(){
A a = new A();
a.setB1(b());<br> a.setB2(b());
return a;
}
@Bean
public B b(){
B b = new B ();
return b;
}
}
复制
代码
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class OnlyTest {
@Autowired
private A a;
@Autowired
private B b3;
@Autowired
private B b4;
@Test
public void testCompare() {
System.out.println(a.getB1 == b3? "同一个b" : "不同的b");
System.out.println(b3 == b4? "同一个b" : "不同的b");
System.out.println(a.getB1() == a.getB2() ? "同一个b" : "不同的b");
}
}
复制
代码
运行结果:
使用@Configuration时:
同一个b
同一个b
同一个b
使用@Component时:
不同的b
同一个b
不同的b
解释一 下:
第一个判断,判断的是@AutoWired自动注入和直接调用@Bean方法获得的对象是不是同一个,结论:使用@Component时不是同一个,使用@Configuration时是同一个
第二个判断,判断的是两个被@AutoWired自动注入的变量是不是同一个,结论:不管使用的是@Component还是@Configuration,都是同一个,因为默认是单例的,其实这种情况跟本次讨论的@Component和@Configuration的对比没关系,放这里是怕理解出现混淆
第三个判断,判断的是多次调用@Bean方法,返回的对象是不是一个,结论:使用@Component时不是同一个,使用@Configuration时是同一个
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
继续阅读请点击广告
回复
使用道具
举报
返回列表
大号在练葵花宝典
+ 我要发帖
×
登录参与点评抽奖,加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表