Diferença entre setter de mola e injeção de interface?

5

Eu sei como a injeção de construtor e setter funciona na primavera.

Normalmente eu uso interfaces em vez de classes para injetar beans usando o setter e considero isso como injeção de interface, mas no caso do construtor também usamos interfaces (estou confuso). No exemplo a seguir, uso JobProcessor interface em vez de JobProcessorImpl class.

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

Eu tentei encontrar uma solução pesquisando, mas há opiniões diferentes de escritores. Mesmo algumas pessoas dizem que a primavera não suporta injeção de interface em seus blogs / declarações.

Alguém pode me ajudar pelo exemplo?

    
por Satish Pandey 31.08.2012 / 17:31
fonte

1 resposta

3

Na injeção de interface, o método setter é fornecido por uma interface que é implementada pelo bean no qual vamos injetar a dependência. Exemplo:

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);
}

O mesmo está funcionando para mim na primavera, aplicando a seguinte configuração:

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

Em alguns sites, as pessoas dizem que a primavera não suporta injeção de interface, mas para mim o exemplo acima funciona na primavera. Como por mim: spring suporta injeção de interface.

Referência: Martin Fowler: Injeção de interface

    
por 01.09.2012 / 16:18
fonte