0

目前,我有一个服务类,我试图在其中构造自动连接配置类。但是,我希望我的服务类是通用的,并且适用于任何具有类似属性的配置类。有没有办法可以根据参数有条件地在服务类中自动连接配置类。我不想要任何 if-else 条件。下面是我的示例代码片段

    @Service
    public ServiceClass {
    private COnfigurationClass configurationClass

    public ServiceClass(COnfigurationClass configurationClass) {
       this.configurationClass = configurationClass
    }

    //Some method that makes use of configuration class

    }

    @ConfigurationProperties(prefix="abc")
    public class COnfigurationClass {
      enter code here
    }

我希望我的 ServiceClass 根据我在初始化 ServiceClass 时传递的参数自动连接带有前缀 =“xyz”的新 ConfigurationClass

4

2 回答 2

0

所以一个简单的解决方案是在创建 bean 的方法上添加 @ConditionalOnProperty(value = "bean.enabled") 注释(configurationClass bean)

并且在您的服务类中自动装配它时使用 @Autowired(required=false) 尽管您稍后必须在使用时进行空检查

请参阅可能有帮助的类似问题, 如何在 Spring Boot 中有条件地自动装配?

于 2020-04-15T01:44:57.350 回答
0

好的,我能够解决这个问题。我创建了一个基类,它由多个具有相同配置属性的配置类扩展。

现在我将所有配置类自动连接为 List

下面是我的例子

@Component
public class BaseConfig {

}

@Component
@ConfigurationProperties(prefix="abc")
public class ConfigABC extends BaseConfig {

}

@Component
@ConfigurationProperties(prefix="xyz)
public class ConfigXYZ extends BaseConfig {

}



@Service
public SomeService {

@Autwire
List<BaseConfig> baseConfig; //baseConfig contains the list of all BaseConfig classes

baseConfig.checkForSomeProperty() //Determine which config property to use

}

}


于 2020-02-10T17:41:35.940 回答