如何在非db访问模型中使用自动装配

时间:2015-12-29 10:22:48

标签: java spring spring-boot autowired

我有一个服务模型可供使用。但是自动装配的注释返回空值。然而,这种自动装置在使用中效果很好。在Module类中有没有做什么?

public class Module{
    private int id;
    private String name;
    private ArrayList<Function> functions;

    @Autowired
    private SysModuleLgDao sysModuleLgDao;



    public Module() {
        sysModuleLgDao.doSth();
    }
}

这是我的回购课程:

@Repository
public interface SysModuleLgDao extends JpaRepository<SysModuleLgEntity, Long> {
    public List<SysModuleLgEntity> findByModuleLgIdAndLanguageId(long moduleLgId,long languageId);
}

1 个答案:

答案 0 :(得分:0)

在Spring有机会进行布线之前调用对象的构造函数,因此sysModuleLgDao引用处于其默认状态(即null)。在调用默认构造函数很久之后,Spring的上下文加载发生在后期阶段。

在Spring bean构建完成后,您可以通过在不同的生命周期阶段执行doSth来解决此问题。这可以通过the @PostContstruct annotation

来实现
public class Module {
    @Autowired
    private SysModuleLgDao sysModuleLgDao;

    @PostConstruct
    public void initialise() {
        // at this point sysModuleLgDao is already wired by Spring
        sysModuleLgDao.doSth();
    }
}

此处有更多详情:Why use @PostConstruct?