我正在创建一个小框架,它提供了一些必须在使用库时实现的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 {
}
我怎样才能做到这一点?
答案 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
}
}