我有一个服务模型可供使用。但是自动装配的注释返回空值。然而,这种自动装置在使用中效果很好。在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);
}
答案 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?