spring注入的原理
作者:bin按照Bean名称从BeanFactory中获取或创建Bean的实例,然后反射将其注入属性的值中
类:org.springframework.beans.factory.annotation.InjectionMetadata
protected void inject(Object target, @Nullable String requestingBeanName, @Nullable PropertyValues pvs)
throws Throwable {
if (this.isField) {
Field field = (Field) this.member;
//如果是私有方法,获得他的权限,才能注入
ReflectionUtils.makeAccessible(field);
//getResourceToInject从beanFactory中通过beanName获取或者创建Bean实例
field.set(target, getResourceToInject(target, requestingBeanName));
}
else {
if (checkPropertySkipping(pvs)) {
return;
}
try {
Method method = (Method) this.member;
ReflectionUtils.makeAccessible(method);
method.invoke(target, getResourceToInject(target, requestingBeanName));
}
catch (InvocationTargetException ex) {
throw ex.getTargetException();
}
}
}