Можно ли предотвратить создание bean-компонента типа A
, если он может быть сгенерирован как основной bean-компонент
Пример:
У меня есть два класса конфигурации и два профиля.
AppConfig.java: (общий класс конфигурации, содержащий все bean-компоненты)
@Configuration
public class AppConfig {
@Value("${host}")
private String host;
@Bean
public A getA() {
//uses the 'host' value to create an object of type A
// Involves database connections
}
@Bean
public B getB(A a) { //Others using bean A. This might come from either getA() or getOtherA()
...
}
}
SpecificConfig.java: (эти bean-компоненты будут созданы, только если profile-a
активен)
@Configuration
@Profile("profile-a")
public class SpecificConfig{
@Bean
@Primary
public A getOtherA() {
//return a bean of type A
}
}
Здесь, когда выбран profile-a
, bean-компонент типа A
будет получен из SpecificConfig.java
. Но проблема в том, что когда profile-a активен, параметр host
в AppConfig.java недоступен, и поэтому метод getA в AppConfig выдает исключение.
Поскольку bean-компонент типа A уже существует или будет там (я не уверен в порядке создания bean-компонента), я не хочу, чтобы getA() в AppConfig выполнялся. (когда профиль-а активен)
Есть ли способ добиться этого?
Возможные решения:
Добавьте
@Profile({"!profile-a"})
в начало метода getA в AppConfig.Добавьте проверку if, чтобы увидеть, существует ли параметр хоста.
Я не хочу делать два вышеперечисленных, так как мне придется измениться в нескольких местах. (Есть куча других bean-компонентов, таких как
A
и другие параметры, такие какhost
)
Спасибо
Дайте мне знать, если потребуются какие-либо разъяснения.