嗨,我正在尝试在代码中注入一个对象。但由于某种原因,它将保持为空。
我试过以下的事情;添加PostConstruct(未调用...)删除CDI的其他部分以使第一次注入工作。还检查了Payara中是否启用了CDI。
我在meta-inf和web-inf中添加了一个beans.xml
我称之为bean的代码的缩短版本。
public class MovieFacade implements iMovieFacade {
@Inject
private iMovieDao md;
@PostConstruct
void init(){
System.out.println(md);//I do this to test if the postConstruct is called
}
public List<Movie> getAllMovie() {
return md.getAllMovies();
}
}
缩短我尝试调用的类的代码。
@ApplicationScoped
public class MovieDao implements iMovieDao {
private DataStoreMaker dataStoreMaker;
private DCM dcm;
@PostConstruct
private void onInit(){
dataStoreMaker = new DataStoreMaker();
dcm = new DCM(dataStoreMaker.movieDS());
}
public List<Movie> getAllMovies(){
List<Movie> ml = dcm.find().asList();
return ml;
}
}
界面
public interface iMovieDao {
void newMovie(Movie movie);
Movie getId(String id);
List<Movie> getAllMovies();
void editMovie(Movie movie);
}
在Java EE中,您的MovieFacade应该是一个由容器管理的bean(具有生命周期)。要做到这一点,只需添加您选择的注释,例如@Stateless。
@Stateless
public class MovieFacade implements iMovieFacade {
@Inject
private iMovieDao md;
@PostConstruct
void init(){
System.out.println(md);//I do this to test if the postConstruct is called
}
public List<Movie> getAllMovie() {
return md.getAllMovies();
}
}