CDI注入始终为null

问题描述 投票:0回答:1

嗨,我正在尝试在代码中注入一个对象。但由于某种原因,它将保持为空。

我试过以下的事情;添加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);
}
cdi javabeans payara java-ee-8
1个回答
0
投票

在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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.