Это не простой BeanPostProcessor
. Если вы пытаетесь осуществить это просто, как это:
public class MyAutowiredBeanPostProcessor implements BeanPostProcessor {
@Autowired
ApplicationContext context;
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
Class<?> beanClass = bean.getClass();
Field[] declaredFields = beanClass.getDeclaredFields();
for (Field field : declaredFields) {
MyAutowired annotation = field.getAnnotation(MyAutowired.class);
if (annotation != null){
Class<?> type = field.getType();
Object beanForInjection = context.getBean(type);
field.setAccessible(true);
ReflectionUtils.setField(field, bean, beanForInjection);
}
}
return bean;
}
Вы увидите, что это прекрасно «провод» бобы внутри других бобов, но «провода» ничего в Java Configuration
классе. Кроме того, если вы отслеживать порядок, в котором бобы приходят к БППАМ просто Println beanName
в postProcessBeforeInitialization
методе вы увидите:
Bean came to bpp: org.springframework.context.event.internalEventListenerProcessor
Bean came to bpp: org.springframework.context.event.internalEventListenerFactory
Bean came to bpp: javaConfig
Initialized isBeanAutowired, and myBean is: null
Bean came to bpp: isBeanAutowired
Bean came to bpp: myBean
анализ зависимостей боба (другие бобы, которые должны быть проводными) и определить порядок, в котором будут инициализированы компоненты.
Так что же AutowiredAnnotationBeanPostProcessor
звучит как небольшое нарушение первоначальной философии BPP. Это не отдельная ответственность.
«Поля вводятся сразу после построения компонента, прежде чем будут задействованы любые методы конфигурации». [http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/beans/factory/annotation/Autowired.html](http://docs.spring.io/spring- рамки/документы/2.5.x/API/орг/springframework/бобы/завод/аннотаций/Autowired.html) – Alessandro