我正在为@Configuration
课程编写测试。它声明@Bean
initMethod
:
@Bean(initMethod = "doSomething")
public MyBean myBean() {
// instantiation and initialization
}
doSomething
方法做了大量工作,需要复杂的测试设置才能成功。我想测试bean是否已正确初始化但我不希望Spring在初始化完成后调用doSomething
方法。
我的第一个想法是使用BeanFactoryPostProcessor
:
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
String[] beanNames = beanFactory.getBeanNamesForType(MyBean.class);
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanNames[0]);
// TODO: disable initMethod
}
但似乎无法使用BeanDefinition
来停用initMethod
。
我是否遗漏了某些东西或是否有其他方法可以实现这一目标?
答案 0 :(得分:3)
检查BeanDefinition
是RootBeanDefinition
(或AbstractBeanDefinition
),然后使用其setInitMethodName
将init方法设置为null
。
设置初始化方法的名称。默认值为
null
没有初始化方法的情况。
if (beanDefinition instanceof RootBeanDefinition) {
((RootBeanDefinition) beanDefinition).setInitMethodName(null);
}