我有2个豆子:
@Component("FierstClient")
public class FierstClient implements CryptoClient {
和
@Component("SecondClient")
public class SecondClient implements CryptoClient {
我有服务:
@Component
public class CryptoServiceImpl implements CryptoService {
private final Marshaler marshaler;
private final CryptoClient cryptoClient;
public CryptoServiceImpl(Marshaler marshaler,
@Qualifier("FirstClient") CryptoClient cryptoClient) {
this.marshaler = marshaler;
this.cryptoClient = cryptoClient;
}
现在我有一个任务-控制该bean配置文件。我知道一些解决方案,但对我来说似乎很幼稚:
创建配置default-server: first // or second
并在CryptoServiceImpl
中注入2个bean:
@Qualifier(“ FirstClient”)CryptoClient cryptoClientFirst @Qualifier(“ SecondsClient”)CryptoClient cryptoClientSecond
当我使用它时写:
if(default-server equals first)...else...
Profile
。但是,我将有另一个配置,如DB等吗?答:我将有很多组合,例如:FirstClientAndPosgresqlProfile FirstClientAndOracleProfile SecondClientAndPosgresqlProfile SecondClientAndOracleProfile
...
如果我将拥有更多可更改的参数,我将拥有新的配置文件吗?
对于依靠配置文件中的变量使用不同的bean实现可能存在明确的解决方案吗?
答案 0 :(得分:2)
您可以使用类似的东西
ListViewStaggeredLayout
您需要将spanCount
属性设置为@Configuration
public class ClientConfig {
@Bean(name="criptoClient")
@ConditionalOnProperty(
name = "enabled.client",
havingValue = "first")
public CryptoClient firstClient() {
// return first client
}
@Bean(name="criptoClient")
@ConditionalOnProperty(
name = "enabled.client",
havingValue = "second")
public CryptoClient secondClient() {
// return second client
}
@Bean(name="criptoClient")
@ConditionalOnProperty(
name = "enabled.client",
matchIfMissing = true)
public CryptoClient defaultClient() {
// return default client
}
}
或enable.client
。如果该属性不存在,first
将被实例化。
另一种方法是将second
移到您的DefaultClient
定义之上。在这种情况下,您将不再需要上面的@ConditionalOnProperty
。
@Component