在spring启动类中获取空会话

时间:2016-02-03 15:39:43

标签: java spring hibernate session

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方法被调用了两次。我最后放了一个布尔变量来加载底层数据一次。

现在很少有问题

  1. 为什么onApplicationEvent被调用两次。
  2. 我的缓存对象用@Component注释,假设只要@Autowired实例正在使用该对象,它是否安全,它将保持单独并保存我在启动时加载的数据?

0 个答案:

没有答案