XML Konfigurace Springu a null reference jako výsledek

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #15 kdy: 28. 11. 2017, 10:22:07 »
Zadanie chápem takto: Ak je fooproperty prítomná, wiruje sa bean s identifikátorom beanid, v opačnom prípade  sa wiruje null.

@Honza: vo vašom prípade wirujete vždy null, čo je skoro rovnaké, ako keby ste ten property tag ani nenadeklarovali.


Phi

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #16 kdy: 28. 11. 2017, 10:30:16 »
novotnyr> diky. jo, proste je to cele nesmysl, jen mne zajimalo, jestli se ten context da nejak ohnout do doby, nez se nekdo dostane k ticketu na opravu. no, neda, nez tam zacit recit null factory, to uz je lepsi to prepsat.

anonym

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #17 kdy: 28. 11. 2017, 10:38:19 »
A neslo by tohle?

Kód: [Vybrat]
<bean class="cz.root.foo.FooService">
    <property name="foo">
        <null />
    </property>
</bean>

Boze ty si debil.

Natix

Re:XML Konfigurace Springu a null reference jako výsledek
« Odpověď #18 kdy: 28. 11. 2017, 19:09:39 »
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ě?

Kód: [Vybrat]
@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:

Kód: [Vybrat]
@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í.