compose与constitute的区别(【一句话】@Configuration和@Component的区别)
首先一句话:
@Configuration修饰的类会被Cglib动态代理 ,@Component不会 。
详细:
Cglib动态代理生成当前对象的子类Class ,并对方法拦截 ,多次调用@Bean方法时直接从BeanFactory之中获取 ,得到同一个对象 。
即使用@Configuration时
@Autowired自动注入的对象和直接调用@Bean修饰的方法及多次调用@Bean修饰的方法拿到的是同一个对象 。
当然 ,多个@Autowired自动注入的对象不管使用哪个注解拿到的都是同一个对象哈 ,因为默认是单例的嘛
看个例子就好理解了:
运行结果:
使用@Configuration时:
同一个b
同一个b
同一个b
使用@Component时:
不同的b
同一个b
不同的b
解释一 下:
第一个判断 ,判断的是@AutoWired自动注入和直接调用@Bean方法获得的对象是不是同一个 ,结论:使用@Component时不是同一个 ,使用@Configuration时是同一个
第二个判断,判断的是两个被@AutoWired自动注入的变量是不是同一个 ,结论:不管使用的是@Component还是@Configuration ,都是同一个,因为默认是单例的 ,其实这种情况跟本次讨论的@Component和@Configuration的对比没关系 ,放这里是怕理解出现混淆
第三个判断,判断的是多次调用@Bean方法 ,返回的对象是不是一个 ,结论:使用@Component时不是同一个 ,使用@Configuration时是同一个
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!