English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Injeção de dependência do Spring

A injeção de dependência (DI) é um padrão de design que remove dependências do código de programação, permitindo que o aplicativo seja gerenciado e testado de maneira mais fácil. A injeção de dependência torna nosso código de programação menos acoplado. Para entender melhor o DI, vamos primeiro entender a busca de dependências (DL):

Busca de dependências

A busca de dependências é uma maneira de obter recursos após a demanda. Por exemplo, existem várias maneiras de obter recursos:

A obj = new AImpl();

Desta forma, podemos obter recursos diretamente através da palavra-chave new (instância da classe A). Outra方法是工厂方法:

A obj = A.getA();

Desta forma, obtemos recursos chamando o método de fábrica estático getA() (instância da classe A).

Ou, podemos obter recursos através do JNDI (Java Naming and Directory Interface). :

Context ctx = new InitialContext();
Context environmentCtx = (Context) ctx.lookup("java:comp"/env);
A obj = (A) environmentCtx.lookup("A");

Existem várias maneiras de obter recursos para obter recursos. Vamos ver os problemas deste método.

Problemas de busca de dependências

Existem principalmente dois problemas de busca de dependências.

C耦合: A与方法查找依赖关系使代码紧密耦合。如果更改了资源,则需要对代码进行大量修改。 Testar não é fácil: Este método pode causar muitos problemas ao testar aplicativos, especialmente em testes de caixa preta.

Injeção de dependência

A injeção de dependência é um padrão de design que elimina programas. Neste caso, fornecemos informações de uma fonte externa (por exemplo, arquivo XML). Ela faz nosso código mais flexível e mais fácil de testar. Neste caso, escrevemos o código da seguinte forma:

class Employee{
Address address;
Employee(Address address){
this.address=address;
{}
public void setAddress(Address address){
this.address=address;
{}
{}

Neste caso, a instância da classe Address é fornecida por uma fonte externa (por exemplo, arquivo XML) através do construtor ou método setter.

Dois métodos para executar injecção de dependência no framework Spring

O framework Spring fornece dois métodos para injetar dependências

Pela método construtor Pela método setter