Follow up to my existing question,我得到了空会话工厂,因此我的交易失败了。这是我的班级结构的样子
@Component
public class MyCachingObj extends HibernateMapper{
@PostConstruct
public void loadAll() {
...
getCurrentSession().getQuery(); //this method is in HibernateMapper
...
}
}
@Repository
public class HibernateMapper {
@Autowired
private SessionFactory _session;
public Session getCurrentSession() {
return _session;
}
}
到目前为止我所读到的内容@PostConstruct
并不能保证所有bean都使用spring。然后,我怎样才能确保弹簧已经完成处理并且我已准备好接收会话?
修改 我最终创建了
@Component
@Transactional
@Repository
public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent>{..}
具有自动装配的会话并自动装配另一个Component
课程。但是,我注意到这个onApplicationEvent
方法被调用了两次。我最后放了一个布尔变量来加载底层数据一次。
现在很少有问题
onApplicationEvent
被调用两次。 @Component
注释,假设只要@Autowired
实例正在使用该对象,它是否安全,它将保持单独并保存我在启动时加载的数据?