Я настроил весну с AnnotationConfigApplicationContext
. В то время как я вызвал BeanDefinition.getPropertyValues()
в реализации BeanFactoryPostProcessor
, я получил пустой список. Но если я настроил весну с ClasspathXmlApplicationContext
, он вернет правильное значение. Кто-нибудь знает причину?почему BeanDefinition.getPropertyValues возвращает пустой список
Вот мои коды:
@Configuration
public class AppConfig {
@Bean
public BeanFactoryPostProcessorTest beanFactoryPostProcessorTest(){
return new BeanFactoryPostProcessorTest();
}
@Bean
public Person person(){
Person person = new Person();
person.setName("name");
person.setAge(18);
return person;
}
}
public class BeanFactoryPostProcessorTest implements BeanFactoryPostProcessor{
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
BeanDefinition bd = beanFactory.getBeanDefinition("person");
MutablePropertyValues propertyValues = bd.getPropertyValues();
if(propertyValues.contains("name")){
propertyValues.addPropertyValue("name","zhangfei");
}
System.out.println("Factory modfy zhangfei");
}
}
public class MainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
/*ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("context.xml");*/
Person person = context.getBean(Person.class);
System.out.println(person.getName());
}
}
спасибо очень много.
Из Java ЕГО BeanFactoryPostProcessor, ** На BeanFactoryPostProcessor может взаимодействовать и изменять определения боба, но никогда экземпляров боба. **. Вы пытаетесь изменить экземпляр, а не определение. Удовлетворение, если это правильный интерфейс, который вам нужно использовать. – ArunM
благодарит за вашу помощь. в то время как я читал документ, у меня была такая же мысль, как и вы. поэтому я пытаюсь найти разницу между BeanFactoryPostProcessor и BeanPostProcessor, все они дали тот же код expample, что и выше. поэтому я попробовал сам и нашел проблему. У меня есть два вопроса. 1. Как использовать BeanFactoryPostProcessor? как я могу изменить beandefinition? 2. как я описал above.why я получил пустой список после BeanDefinition.getPropertyValues ()? спасибо. –
ОК .. так надеюсь, что мое решение решит вашу проблему. – ArunM