Java 有没有办法检查bean是否在spring上下文中定义?
我正在尝试创建一个对象工厂,它将首先检查是否在spring上下文中专门定义了一个bean。如果找不到这样的bean,它将检查创建实例的其他方法 我使用以下代码实现了它Java 有没有办法检查bean是否在spring上下文中定义?,java,spring,Java,Spring,我正在尝试创建一个对象工厂,它将首先检查是否在spring上下文中专门定义了一个bean。如果找不到这样的bean,它将检查创建实例的其他方法 我使用以下代码实现了它 try { component = (PageComponent) appContext.getBean(w.getName()); } catch (org.springframework.beans.factory.NoSuchBeanDefinitionException e) {
try {
component = (PageComponent) appContext.getBean(w.getName());
} catch (org.springframework.beans.factory.NoSuchBeanDefinitionException e) {
component = loadFromDB(w, page);
}
它正在工作,但是只要bean在Spring上下文中不可用,就会创建一个异常对象
有没有办法避免这种情况?或者换句话说,是否有一种方法可以检查bean是否在spring上下文中定义?尝试以下方法:
if(appContext.containsBeanDefinition(w.getName()))
; // Get the bean
beanFactory.containsBean(w.getName())
将返回一个boolean
值,具体取决于是否已经有一个以该名称注册的bean。看一看
做这样的事
if (!((BeanFactory) applicationContext).containsBean(w.getName())) {
component = loadFromDB(w, page);
}
您还可以使用
ApplicationContextRunner
假设我有一个bean,它以某个配置属性为条件
class IsExistBeanTest {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withUserConfiguration(SomeConfig.class)
@Test
void TestIfBeanIsThereWhenPropsExist() {
contextRunner
.withPropertyValues("some-left-service=false")
.run(context -> assertAll(
() -> assertThat(context).hasSingleBean(SomeBean.class),
() -> assertThat(context).doesNotHaveBean(SomeOtherBean.class)));
() -> assertThat(context).hasBean(SomeBean2.class)));
//() -> more test case
}
有没有一种方法可以在XML中验证相同的内容?