Differenza tra setter a molla e iniezione interfaccia?

5

So come funziona l'iniezione del costruttore e del setter in primavera.

Normalmente utilizzo le interfacce invece delle classi per iniettare i bean usando setter e lo considero un'iniezione di interfaccia, ma nel caso del costruttore utilizziamo anche le interfacce (sono confuso). Nell'esempio seguente utilizzo JobProcessor interface anziché JobProcessorImpl class.

public class JobScheduler {
    // JobProcessor interface
    private JobProcessor jobProcessor;
    // Dependecy injection
    public void setJobProcessor(JobProcessor jobProcessor){
        this.jobProcessor = jobProcessor;
    }
}

Ho cercato di trovare una soluzione su google, ma ci sono opinioni diverse degli autori. Anche alcune persone dicono che la primavera non supporta l'iniezione di interfacce nei loro blog / dichiarazioni.

Qualcuno può aiutarmi con l'esempio?

    
posta Satish Pandey 31.08.2012 - 17:31
fonte

1 risposta

3

Nell'iniezione dell'interfaccia, il metodo setter è fornito da un'interfaccia che viene implementata dal bean in cui inietteremo la dipendenza. Esempio:

package some.package;
public class Car implements EngineMountable {
    private Engine engine;
    @Override //dependency injection
    public void mount(Engine engine){
        this.engine = engine;
    }
}

public interface EngineMountable {
    void mount(Engine engine);
}

Lo stesso funziona per me in primavera applicando la seguente configurazione:

<bean name="car" class="some.package.Car">
    <property name="mount" ref="engineObject" />
</bean>

In alcuni siti la gente dice che la primavera non supporta l'iniezione dell'interfaccia, ma per me l'esempio sopra funziona in primavera. Per quanto mi riguarda: molla supporta l'interfaccia di iniezione.

Riferimento: Martin Fowler: Interface Injection

    
risposta data 01.09.2012 - 16:18
fonte

Leggi altre domande sui tag