gpt4 book ai didi

java - 在测试中禁用 @Bean 的 initMethod

转载 作者:行者123 更新时间:2023-12-01 22:11:23 26 4
gpt4 key购买 nike

我正在为 @Configuration 类编写测试。它声明了一个带有 initMethod@Bean:

@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

我错过了什么还是有其他方法可以实现这一目标?

最佳答案

检查BeanDefinition是否是RootBeanDefinition(或AbstractBeanDefinition),然后使用它的setInitMethodName将 init 方法设置为 null

Set the name of the initializer method. The default is null in which case there is no initializer method.

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

关于java - 在测试中禁用 @Bean 的 initMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com