Un'altra grande caratteristica di Java EE 6 è l'uso di alternative.L'idea di base è consentono di specificare una alternativa per un oggetto iniettata.Prendete questo caso, per esempio.
Stiamo sviluppando la nostra front-end della nostra applicazione.Gli schermi dipendono da una connessione al database, ma il database non è pronto per lo sviluppo.Forniamo una implementazione 'alternativa' per questo momento.
È possibile specificare un modello che e iniettare.Con questo approccio è necessario modificare il cablaggio della classe.
1.
pubblici
interfaccia
CustomerService {
2.
Lista findAllCustomers ();
3.
}
L'implementazione sarebbe simile a questo.
01.
pubblici
classe
CustomerServiceImpl
implementa
CustomerService {
02.
03.
@ PersistenceContext
. 04
privati
EntityManager em;
05.
06.
@ Override
07.
pubbliche
Lista findAllCustomers () {
08.
query query = em.createNamedQuery (
"Customer.findAll"
, Cliente.
classe
);
. 09
ritorno
query.getResultList ();
10.
}
11.
}
E l'implementazione mock come questo.
1.
pubblici
classe
CustomerServiceMock
implementa
CustomerService {
2.
3.
@ Override
4.
pubbliche
Lista findAllCustomers () {
5.
restituire
Arrays.asList (
nuovo
Cliente (
"Geraldo"
),
nuovi
clienti (
"Scruffy"
),
nuovi
clienti (
"Haddock"
));
6.
}
7.
8.
}
Nella tua classe che utilizza questo servizio, si può semplicemente iniettare.
1.
@ Iniettare
privato
CustomerService customerservice;
Quando si tenta di eseguire questo, darà un errore:
'Dipendenze ambiguo per il tipo [CustomerService] con qualificazioni [@ Default] al punto di iniezione [[settore] @ Iniettare privato be.styledideas.blog.alternative.web.CustomerBackingBean.customerService].Possibili dipendenze [[Managed Bean [classe be.styledideas.blog.alternative.CustomerServiceMock] con qualificazioni [@ @ Ogni predefinita], Managed Bean [classe be.styledideas.blog.alternative.CustomerServiceImpl] con qualificazioni [@ @ Ogni Default]] ].Si prega di consultare server.log per maggiori dettagli. '
Il contenitore non sa cosa attuazione deve essere iniettato.Dovremo segnare l'implementazione mock.Lo facciamo con l'aggiunta della alternativa annotazione su di esso.
1.
@ Alternative
2.
pubblici
classe
CustomerServiceMock
implementa
CustomerService {
3.
4.
@ Override
5.
pubbliche
Lista findAllCustomers () {
6.
restituire
Arrays.asList (
nuovo
Cliente (
"Haddock"
),
nuovi
clienti (
"Geraldo"
),
nuovi
clienti (
"Scruffy"
));
7.
}
8.
}
Quando noi oggi iniziamo il nostro server, c'è solo una implementazione che si qualifica per questo punto di iniezione, cioè la classe CustomerServiceImpl.
Questo non è ciò che vogliamo ottenere, vogliamo essere in grado di iniettare il nostro mock per il tempo che non riesce a connettersi al database.
Nel nostro file beans.xml (standard CDI) si aggiunge questo:
1.
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
2.
<
fagioli
xmlns
=
" http://java.sun.com/xml/ns/javaee "
3.
xmlns: xsi
=
" http://www.w3.org/2001/XMLSchema-instance "
4.
xsi: schemaLocation
=
" http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/beans_1_0.xsd "
>
5.
<
alternative
>
6.
<
classe
> be.styledideas.blog.alternative.CustomerServiceMock
classe
>
7.
alternative
>
8.
fagioli
>
Ogni volta che si corre il nostro codice, avremo una implementazione mock in cui si usa il servizio al cliente.Grazie questa è configurato in un file xml, possiamo cambiare questo senza dover fare la ricompilazione della nostra applicazione.
Accanto, decorator
Corso Java - Corsi Java - Corsi programmazione Java
Nessun commento:
Posta un commento
Nota. Solo i membri di questo blog possono postare un commento.