Visão global
Spring bean injection is also popularly known as ‘Dependency Injection (DI)’. The heart of Spring framework is ‘Inversion Of Control (IoC)’ and DI is the implementation part of IoC. We will start our discussion with the assumption that the concept and purpose of IoC and DI is already know.
In this article, we will focus on different types of Spring bean injections with some practical coding examples.
Dependency Injection
Spring bean injections can be performed in two major ways, one is known as Constructor-based DI and the other one is known as Setter-based DI. In the following sub-sections we will check how these can be achieved.
Constructor Based DI
In a constructor based DI, dependencies are injected through constructors. Cada argumento do construtor é um objeto de dependência / bean. O contêiner do Spring invoca os construtores com os argumentos.
Vamos verificar um exemplo. Existem duas classes, one is the País classe eo outro é o Estado classe. The País classe tem uma dependência no Estado classe. So, passaremos a dependência ao País classe através de seu construtor (como mostrado abaixo).
Listing 1: classe país
com.techalpine.spring pacote;
classe pública País {
Estado Estado privada;
País pública(Estado Estado) {
System.out.println(“Dentro construtor País.” );
this.state = Estado;
}
stateName public void() {
state.stateName();
}
}
Now, essa dependência pode ser usado para chamar métodos diferentes.
Segue-se o Estado trechos de código classe.
Listing 2: classe Estado
com.techalpine.spring pacote;
Estado public class {
Estado pública(){
System.out.println(“Dentro construtor Estado.” );
}
stateName public void() {
System.out.println(“Dentro nome de Estado: West Bengal”);
}
}
Segue-se o arquivo de configuração XML para conectar aqueles feijões e suas dependências. O bean id ('StateBean') of the Estado classe é usada como uma referência argumento no construtor País definição de bean class. Now, os grãos são definidos e ligados entre si.
Listing 3: arquivo de configuração XML
<?xml version=”1.0″ encoding=”UTF-8″?>
<feijão xmlns =”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd”>
<!– Definição de feijão País –>
<bean id =”countryBean” class =”com.techalpine.spring.Country”>
<Arg-construtor ref =”stateBean”/>
</feijão>
<!– Definição de feijão Estado –>
<bean id =”stateBean” class =”com.techalpine.spring.State”>
</feijão>
</feijões>
A seguir é a classe principal para testar a injeção de feijão-com base construtor.
Listing 4: arquivo do aplicativo principal
com.techalpine.spring pacote;
import org.springframework.context.ApplicationContext;
importação org.springframework.context.support.FileSystemXmlApplicationContext;
TestBeanInjection classe pública {
public static void main(Corda[] args) {
ApplicationContext contexto = new FileSystemXmlApplicationContext(
“WebContent / WEB-INF / beanConfig.xml”);
País countryobj = (País)context.getBean(“countryBean”);
countryobj.stateName();
}
}
Now, executar a classe como uma aplicação stand-alone e ele vai mostrar a seguinte saída no console.
Dentro construtor Estado
Dentro construtor País
Dentro nome de Estado: West Bengal
Conjuntos de Bases DI
Numa base DI Setter, dependências são passados através de métodos setter. container Spring invoca esses métodos setter de instanciar o feijão. Here, o mecanismo e os componentes são quase semelhante ao DI construtor baseado. A única diferença é, na passagem de dependências ea configuração XML. Em uma injeção com base setter, <propriedade> marcações são utilizadas em vez de <constructor-arg> tag.
Conclusão
Neste artigo nós explicamos as maneiras como feijão mola podem ser injetadas. Não existe uma regra clara quando usar DI setter base ou construtor base. Nós geralmente vão para o construtor base DI quando as dependências são obrigatórios, e selecione DI baseada em setter quando as dependências são opcionais. Mas combinações de ambos também são permitidos.