English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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):
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.
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.
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.
O framework Spring fornece dois métodos para injetar dependências
Pela método construtor Pela método setter