根据Spring Framework JavaDoc,BeanPostProcessor
是:
允许自定义修改新bean实例的工厂挂钩
Spring是否使用反射通过preInstantiateSingletons
实例化非延迟单例bean,然后AutowiredAnnotationBeanPostProcessor
使用反射来设置在构造函数上定义@Autowired
的字段(例如最终字段) (和二传手/字段)?
如果是这样,是否可以编写在BeanPostProcessor
之前处理的自定义AutowiredAnnotationBeanPostProcessor
来验证此行为?我尝试使用自定义BeanPostProcessor
通过实施PriorityOrdered
执行此操作,如下所示:
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
注意:但是,当调用postProcessBeforeInitialization
时,bean似乎已经通过@Autowired
设置了字段。
答案 0 :(得分:1)
查看 AbstractAutowireCapableBeanFactory.doCreateBean 。 基本上有三个步骤。
所以 BeanPostProcessor 太迟了。但是看看 populateBean ,你会发现 InstantiationAwareBeanPostProcessor 将在autowired属性之前执行。 所以你可以为你创建 InstantiationAwareBeanPostProcessor 的bean类型。
完整示例
IFERROR