Я нашел этот пример, http://tomee.apache.org/examples-trunk/injection-of-ejbs/README.html
И он утверждает, что является примером внедрения зависимостей. Я вижу несколько интерфейсов и после того, как эти интерфейсы реализованы, я не вижу, как реализация @EJB использует что-либо DI. Это просто выглядит как три разных типа, использующих разные интерфейсы.
Я ожидал увидеть один интерфейс и много разных классов, которые его реализуют, и которые передаются/вводятся в класс DataReader в примере либо путем построения, либо с помощью установщика.
Как этот пример показывает внедрение зависимостей?
(я должен публиковать код с другого сайта?)
Это класс DataReader:
import javax.ejb.EJB;
import javax.ejb.Stateless;
/**
* This is an EJB 3.1 style pojo stateless session bean
* Every stateless session bean implementation must be annotated
* using the annotation @Stateless
* This EJB has 2 business interfaces: DataReaderRemote, a remote business
* interface, and DataReaderLocal, a local business interface
* <p/>
* The instance variables 'dataStoreRemote' is annotated with the @EJB annotation:
* this means that the application server, at runtime, will inject in this instance
* variable a reference to the EJB DataStoreRemote
* <p/>
* The instance variables 'dataStoreLocal' is annotated with the @EJB annotation:
* this means that the application server, at runtime, will inject in this instance
* variable a reference to the EJB DataStoreLocal
*/
//START SNIPPET: code
@Stateless
public class DataReader {
@EJB
private DataStoreRemote dataStoreRemote;
@EJB
private DataStoreLocal dataStoreLocal;
@EJB
private DataStore dataStore;
public String readDataFromLocalStore() {
return "LOCAL:" + dataStoreLocal.getData();
}
public String readDataFromLocalBeanStore() {
return "LOCALBEAN:" + dataStore.getData();
}
public String readDataFromRemoteStore() {
return "REMOTE:" + dataStoreRemote.getData();
}
}