Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法检查bean是否在spring上下文中定义?_Java_Spring - Fatal编程技术网

Java 有没有办法检查bean是否在spring上下文中定义?

Java 有没有办法检查bean是否在spring上下文中定义?,java,spring,Java,Spring,我正在尝试创建一个对象工厂,它将首先检查是否在spring上下文中专门定义了一个bean。如果找不到这样的bean,它将检查创建实例的其他方法 我使用以下代码实现了它 try { component = (PageComponent) appContext.getBean(w.getName()); } catch (org.springframework.beans.factory.NoSuchBeanDefinitionException e) {

我正在尝试创建一个对象工厂,它将首先检查是否在spring上下文中专门定义了一个bean。如果找不到这样的bean,它将检查创建实例的其他方法

我使用以下代码实现了它

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中验证相同的内容?