使用Play Framework和Guice进行依赖注入会导致应用程序启动时出现NullPointerException

 手机用户2602916425 发布于 2023-02-08 08:44

我有以下代码:

import javax.inject.Inject;
import models.Subject;
import models.dao.SchoolDao;
import models.dao.SubjectDao;
import play.Application;
import play.GlobalSettings;
import play.db.jpa.JPA;
import play.db.jpa.Transactional;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;


public class Global extends GlobalSettings{

private Injector injector;

@Inject
private SubjectDao subjectDao;

@Override
public void onStart(Application application) {
    injector = Guice.createInjector(new AbstractModule() {
        @Override
        protected void configure() {
            bind(SchoolDao.class);
            bind(SubjectDao.class);
        }
    });

    insertInitialData();
}

@Override
public  A getControllerInstance(Class aClass) throws Exception {
    return injector.getInstance(aClass);
}

@Transactional
private void insertInitialData(){

    if(subjectDao.countAll() == 0){
        Subject deutsch = new Subject();
        deutsch.setName("Deutsch");
        subjectDao.create(deutsch); 

        Subject englisch = new Subject();
        deutsch.setName("Englisch");
        subjectDao.create(englisch);

        Subject mathe = new Subject();
        deutsch.setName("Mathematik");
        subjectDao.create(mathe);

        Subject hab = new Subject();
        deutsch.setName("Hausaufgabenbetreuung");
        subjectDao.create(hab);
    }
}

}

如您所见,我想在启动时使用初始值为我的数据库设定种子.我有一个应该注入的数据访问对象"subjectDao".这适用于我的应用程序的其他位置,但由于某些原因不适用于应用程序启动.我得到一个NullPointerException,我的subjectDao为null.有人有个主意.

1 个回答
  • 看起来你实际上没有注入任何东西Global,你只是绑定你的类(并处理控制器注入,但这是无关紧要的).

    你应该通过调用eg来做到这一点.Injector.injectMembers(this)得到subjectDao你的Global正确注射.

    2023-02-08 08:50 回答
撰写答案
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有