在test中禁用@Bean的initMethod

时间:2015-07-31 18:56:50

标签: java spring

我正在为@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

我是否遗漏了某些东西或是否有其他方法可以实现这一目标?

1 个答案:

答案 0 :(得分:3)

检查BeanDefinitionRootBeanDefinition(或AbstractBeanDefinition),然后使用其setInitMethodName将init方法设置为null

  

设置初始化方法的名称。默认值为null   没有初始化方法的情况。

if (beanDefinition instanceof RootBeanDefinition) {
    ((RootBeanDefinition) beanDefinition).setInitMethodName(null);
}