Spring注入 @Autowired和setter方式区别原理
2019-01-15 本文已影响0人
IT菜鸟学习
spring 的注入方式有:setter、constructor、静态工厂方法、实例工厂方法、注解@Autowired自动装配几种方式。
@Autowired,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。
今天我们要了解的是:setter和@Autowired两种方式的区别
,常用的setter方式很好理解,通过调用Bean的属性setter方法直观的赋值即可。而@Autowired方式,没有setter方法赋值又是通过什么方式实现的呢?看一下spring源码:
1、AbstractAutowireCapableBeanFactory类中的autowireBean()方法
image.pngpopulateBean()方法:
image.png
2、AutowiredAnnotationBeanPostProcessor类中通过postProcessPropertyValues()方法很容易找到内部类AutowiredFieldElement.inject()方法:
image.png
通过上面的代码很容易了解到,@Autowired方式是通过反射
来设置属性值的,噢。。。。。。。。。万能而无节操的反射,明白了吧
转自:https://blog.csdn.net/wenluoxicheng/article/details/73608657