如何强制服务接口只能存在一个实例,除了Spring中的Default



我有一个接口IStorageService。用户可以通过应用配置来配置不同的业务。与@Bean @ConditionalOnExpression(...)一样创建所有服务。如何强制只能存在一个存储服务?我知道你需要显式地配置以允许beanoverrides,但是我需要有一个DefaultStorageService,如果没有配置,如果配置存在,那么只应该创建一个覆盖DefaultService的服务。如果不止一个配置要创建,我希望启动抛出错误并失败。我该怎么做呢?

如果想检查bean定义,可能需要实现BeanFactoryPostProcessor;如果想检查bean实例,可能需要实现BeanPostProcessor。对于第一种情况,您需要实现postProcessBeanFactory方法,在该方法中您可以完全控制BeanFactory例如,您可以使用getBeanNamesForType(IStorageService.class)方法检查类型为IStorageService的已注册bean列表,如果没有配置bean,则使用registerSingleton注册默认的IStorageService

最新更新