【一句话】@Configuration和@Component的区别(configuration与component)

  本篇文章为你整理了【一句话】@Configuration和@Component的区别(configuration与component)的详细内容,包含有component configuration区别 configuration与component @configuration与@componet componentscan和configuration 【一句话】@Configuration和@Component的区别,希望能帮助你了解 【一句话】@Configuration和@Component的区别。

  详细:

  Cglib动态代理生成当前对象的子类Class,并对方法拦截,多次调用@Bean方法时直接从BeanFactory之中获取,得到同一个对象。

  实际是因为

  注解下有个proxyBeanMethods属性,默认值为true,即通过Cglib动态代理生成一个代理子类,对原始方法进行拦截,由BeanFactory处理;如果手动设为false,直接调用@Bean方法和@Autowired拿到的就不是同一个对象了。当然,你直接调用@Bean方法跟直接调用其他方法也没有区别了,相当于你直接调用的时候,没有被代理类执行,本来执行什么,现在执行什么。比如:B类下有个c对象是@Autowired的,如果把proxyBeanMethods设为false,直接调用@Bean方法生成的B类对象,c成员变量为null。

  另外,如果你想搜索这个属性在哪里使用的话,去搜字符串,因为它的源码是这样的:

  

  入口类:

  org.springframework.context.annotation.ConfigurationClassUtils

  即使用@Configuration时

   @Autowired自动注入的对象和直接调用@Bean修饰的方法及多次调用@Bean修饰的方法拿到的是同一个对象。

  当然,多个@Autowired自动注入的对象不管使用哪个注解拿到的都是同一个对象哈,因为默认是单例的嘛

  看个例子就好理解了:

  

@Configuration

 

  // @Component

  public class Test {

   @Bean

   public A a(){

   A a = new A();

   a.setB1(b());
a.setB2(b());

   return a;

   @Bean

   public B b(){

   B b = new B ();

   return b;

  }

 

  
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时是同一个

   posted on 2023-02-09 20:45马儿跑

  阅读(83)

  评论(0)

  编辑

  收藏

  举报

  以上就是【一句话】@Configuration和@Component的区别(configuration与component)的详细内容,想要了解更多 【一句话】@Configuration和@Component的区别的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: