如何验证bean实例是否已连线?

时间:2014-09-10 14:05:53

标签: java spring spring-boot

我正在创建一个小框架,它提供了一些必须在使用库时实现的abstract基类。

如何创建验证例程来检查是否确实已经实现了所有类?

我以为我可能会使用@ConditionalOnMissingBean的spring-boot,但到目前为止这一点都没有。无论如何,我的目标是:

@Configuration
@EnableAutoConfiguration
public class AppCfg {
    @ConditionalOnMissingBean(BaseCarService.class) //stupid exmaple
    public void validate() {
        System.out.println("MISSING BEAN!!");
    }
}

//must be implemented
public abstract BaseCarService {

}

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以在初始化上下文时调用ApplicationContext.getBeansOfType(BaseCarService.class)(例如,从实现ContextLoaderListener的bean),即类似以下内容:

public class BeansValidator impelements ContextLoaderListener {
    public void contextInitialized(ServletContextEvent event) {
         if (ApplicationContext.getBeansOfType(BaseCarService.class).isEmpty()) {
               // print log, throw exception, etc 
         }
    }
}

答案 1 :(得分:1)

ApplicationListener可用于在启动后访问Context。

public class Loader implements ApplicationListener<ContextRefreshedEvent>{

    public void onApplicationEvent(ContextRefreshedEvent event) {

       if (event.getApplicationContext().getBeansOfType(BaseCarService.class).isEmpty()) {
           // print log, throw exception, etc 
       }
    }

答案 2 :(得分:0)

以下内容可行,但如果您要抛出异常,看起来有点尴尬:

@Configuration
@EnableAutoConfiguration
public class AppCfg {

    @ConditionalOnMissingBean(BaseCarService.class)
    @Bean
    public BaseCarService validate() {
       throw new NoSuchBeanDefinitionException("baseCarService"); //or do whatever else you want including registering a default bean
    }
}