Spring mvc 为什么spring中的@autowired不需要私有实例变量的setter方法?
我的spring项目中有一些代码,如下所示Spring mvc 为什么spring中的@autowired不需要私有实例变量的setter方法?,spring-mvc,Spring Mvc,我的spring项目中有一些代码,如下所示 @Component public class DatabaseAccessUtil { @Autowired private DatabaseAccessor databaseAccessor; } 我关心的是spring的@Autowired注释在没有setter方法的情况下如何工作以及为什么工作,例如: void setDatabaseAccessor(DatabaseAccessor databaseAccessor) {
@Component
public class DatabaseAccessUtil
{
@Autowired
private DatabaseAccessor databaseAccessor;
}
我关心的是spring的@Autowired注释在没有setter方法的情况下如何工作以及为什么工作,例如:
void setDatabaseAccessor(DatabaseAccessor databaseAccessor)
{
this.databaseAccessor = databaseAccessor;
}
春天的奇迹在哪里?谢谢这是因为字段的值是通过注入的,都是我们的后代。此类通过调用将accessible标志设置为true,从而允许访问其私有成员 以下是执行实际注入的
AutowiredBeanPostProcessor
中的实际代码
if (value != null) {
ReflectionUtils.makeAccessible(field);
field.set(bean, value);
}
以及ReflectionUtils.makeAccessible(Field)的源代码
public static void makeAccessible(Field field) {
if ((!Modifier.isPublic(field.getModifiers()) ||
!Modifier.isPublic(field.getDeclaringClass().getModifiers()) ||
Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) {
field.setAccessible(true);
}
}