【发布时间】:2019-02-14 19:44:50
【问题描述】:
您好,我正在尝试在我的代码中注入一个对象。但由于某种原因,它将保持为空。
我尝试了以下事情; 添加一个 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);
}
【问题讨论】:
-
你在 MovieFacade 上放了 Stateless 吗? ApplicationScoped 适用于整个应用程序,因此将在开始时调用 PostConstruct。
-
你怎么称呼
MovieFacade?您如何获得对它的引用? -
您是否正确使用了
javax.enterprise.context包中的@ApplicationScoped注释?听起来您可能正在使用 JSF 特定的。
标签: cdi javabeans payara java-ee-8