..
Agora vamos ver, por exemplo, como usar a injeção de dependência Construtor
Nós criamos o nosso feijão que depende de um serviço genérico:
pacote it.mrwebmaster.di.constructor;
public class {Feijão
GenericService GenericService privado;
beanName private String;
/ **
* Fabricante
* @ Param genericService
* @ Param beanName
* /
pública Bean (GenericService genericService, String beanName) {
super ();
this.genericService = genericService;
this.beanName = beanName;
}
/ **
* Método público
* /
doit public void () {
System.out.println (beanName + "fazer algo");
genericService.dosomething ();
}
}
configurar dependência nell'applicationContext. xml
<bean id="genericService" class="it.mrwebmaster.di.constructor.GenericServiceImpl" scope="singleton" /> <bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName"/> <constructor-arg ref="genericService"/> <Bean />
Como pode ser visto a partir do exemplo para utilizar o Construtor de injeção de dependência deve usar o construtor de tag-arg usando o ref ou atributos de valor. O Attibassi ref necessidade de passar por arg já instanciado nell'IoC outro depósito de grãos, enquanto o atributo valor é usado para passar os valores padrão como strings ou números.
No exemplo o construtor da classe aceita como entrada um feijão GenericService e uma String, mas o exemplo que ele queria inverter a ordem dos argumentos para mostrar como Primavera combinando os argumentos de seu tipo.
Este tipo de comportamento é bom quando todos os argumentos são de tipos diferentes, mas como é que vamos especificar a ordem se os argumentos são do mesmo tipo?
O construtor tag arg fornece o atributo de índice que indica a ordem na Primavera com o qual passar parâmetros.
<bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="beanName" index="1" /> <constructor-arg ref="genericService" index="0" /> <Bean />
Outro caso pode ser ambígua em que a construttore aceita como entrada dois parâmetros que tanto pode ser representado por uma string, por exemplo:
pública Bean (GenericService genericService, String beanName, invocationTimes Integer) {
super ();
this.genericService = genericService;
this.beanName = beanName;
this.invocationTimes = invocationTimes;
}
e nell'applicationContext. xml
<bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg value="0" /> <constructor-arg value="beanName" /> <constructor-arg ref="genericService" /> <Bean />Neste caso, a primavera do erro como "0" pode ser uma string ou um número. Para resolver esse problema, use o índice ou attriburo o atributo tipo como este:
<bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean"> <constructor-arg type="java.lang.Integer" value="0" /> <constructor-arg value="beanName" type="java.lang.String" /> <constructor-arg ref="genericService" /> <Bean />
O atributo construtor arg também pode ser usado para passar parâmetros para o método de fábrica:
public static feijão createBean (GenericService genericService, String beanName, invocationTimes Integer) {
Feijão b = new Bean (genericService, beanName, invocationTimes);
/ / Do somethig .......
retorno b;
}
nell'applicationContext. xml
<bean id="constructorBean3" class="it.mrwebmaster.di.constructor.bean" factory-method="createBean"> <constructor-arg type="java.lang.Integer" value="0" /> <constructor-arg value="beanName" type="java.lang.String" /> <constructor-arg ref="genericService" /> <Bean />
| |
Linux (Curso)
Guia completo para open-source do sistema. A partir de 49 €. |
| |
PHP (Curso)
Curso completo para a criação de sites dinâmicos. A partir de 49 €. |
| |
Ruby e Ruby on Rails (Curso)
Criar aplicações de software e Web com Ruby e RoR. A partir de 39 €. |