iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring注解中@Configuration和@Component的区别是什么
  • 875
分享到

Spring注解中@Configuration和@Component的区别是什么

2023-07-05 23:07:54 875人浏览 薄情痞子
摘要

本文小编为大家详细介绍“spring注解中@Configuration和@Component的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring注解中@Configuration和@Component的区别是什么”文章能

本文小编为大家详细介绍“spring注解中@Configuration和@Component的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring注解中@Configuration和@Component的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Spring 注解中 @Configuration 和 @Component 的区别总结为一句话就是:

@Configuration 中所有带 @Bean 注解的方法都会被动态代理(cglib),因此调用该方法返回的都是同一个实例。而 @Conponent 修饰的类不会被代理,每实例化一次就会创建一个新的对象。

@Configuration 注解的源代码中,使用了 @Component 注解:

Spring注解中@Configuration和@Component的区别是什么

从定义来看, @Configuration 注解本质上还是 @Component,因此 <context:component-scan/> 或者 @ComponentScan 都能处理 @Configuration 注解的类。

下面我们通过一个例子来说明上述情况:

// 使用@Configuration和@Bean注解创建Room实例和People实例,并注入进spring容器@Configurationpublic class RoomPeopleConfig {     @Bean    public Room room() {        Room room = new Room();        room.setId(1);        room.setName("房间");        room.setPeople(people());// 在创建Room实例时,再调用一次People()创建一个People实例        return room;    }     @Bean    public People people() {        People people = new People();        people.setId(1);        people.setName("小明");        return people;    } } // 下面是测试代码@SpringBootTest@ContextConfiguration(classes = Application.class)public class ConfigurationTests {     @Autowired    private Room room;     @Autowired    private People people;      @Test    public void test() {        System.out.println(people == room.getPeople() ? "是同一个实例" : "不是同一个实例");    } }

输出结果:

Spring注解中@Configuration和@Component的区别是什么

如果将 @Configuration 换成 @Component ,则输出:

Spring注解中@Configuration和@Component的区别是什么

从上面的结果可以发现使用 @Configuration 时在 people 和 spring 容器之中的是同一个对象,而使用 @Component 时是不同的对象。这就是因为 @Configuration 使用了 cglib 动态代理,返回的是同一个实例对象。

虽然 @Component 注解也会当做配置类,但是并不会为其生成 CGLIB 代理 Class,所以在生成 room 对象时和生成 people 对象时调用 people( ) 方法执行了两次 new 操作,所以是不同的对象。当使用 @Configuration 注解时,生成当前对象的子类 Class,并对方法拦截,第二次调用 people()方法时直接从 BeanFactory 之中获取对象,所以得到的是同一个对象。

读到这里,这篇“Spring注解中@Configuration和@Component的区别是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Spring注解中@Configuration和@Component的区别是什么

本文链接: https://www.lsjlt.com/news/355918.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作