1.set注入
启动容器后看看到底能不能拿到teacherService的值。可以看到拿到了值。我们具体来分析怎么注入的
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
发现pvs里面有一个我们自己set的值
直接进行属性赋值。
org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveValueIfNecessary
org.springframework.beans.factory.support.BeanDefinitionValueResolver#resolveReference
直接从容器中获取,然后进行属性赋值
真正进行属性赋值:
org.springframework.beans.AbstractPropertyAccessor#setPropertyValues(org.springframework.beans.PropertyValues, boolean, boolean)
问题1:如果set方法乱写可以注入吗?
不行,会报错,我们看看具体在哪里报错
org.springframework.beans.AbstractNestablePropertyAccessor#setPropertyValue(org.springframework.beans.AbstractNestablePropertyAccessor.PropertyTokenHolder, org.springframework.beans.PropertyValue)
这里会报错
会将set后面的方法去掉set,然后首字母小写放入缓存中,来获取对应的注入值,如果找不到直接报错。
如果是这样会报错吗?不会,底层拿到set方法然后进行反射,故set方法和注入的属性一直就不会报错。
如下就不会报错: