A je fakt nutné to definovat v XML? Nebylo by přece jen jednodušší přidat do XML configu <context:component-scan> a pak si prostě vyrobit konfigurační classu s factory metodou, kde celý tenhle problém redukuje na to, napsat podmínku v Javě?
@Configuration
class Config {
@Bean
public Client client(
@Value("${fooproperty:false}") boolean fooproperty,
Depedency depedency
) {
if (fooproperty) {
return new Client(depedency);
} else {
return new Client(null);
}
}
}
@Component
class Depedency {}
class Client {
private final Depedency depedency;
Client(Depedency depedency) {
this.depedency = depedency;
}
}
Anebo v případě, že nejde o to nastavit závislost jedné konkrétní komponentě, ale celkově nechceme tu závislost vůbec instancovat, tak ještě jednodušeji:
@Configuration
class Config {
@Bean
public Depedency depedency(@Value("${fooproperty:false}") boolean fooproperty) {
return fooproperty ? new Depedency() : null;
}
}
class Depedency {}
@Component
class Client {
private final Depedency depedency;
Client(Depedency depedency) {
this.depedency = depedency;
}
}
Nicméně než nastavovat místo reference na komponentu null, který pak musím všude kontrolovat, tak bych asi radši vyextrahovat společný interface k němu prázdnou dummy implementaci, která se použije pokud daná property neplatí.