假设我有以下依赖项:

@Configuration
public class MyCfg {
  // ...
  @Bean
  public Session session() {
    return sessionFactory().getCurrentSession();
  }
}

@Repository
@Transactional
public class MyRepo {
  @Autowired
  private Session session;
}


sessionFactory()设置正确。如果我注入SessionFactory而不是Session,则效果很好。但是,如果尝试并注入Session,则由于没有绑定到线程的会话,它会死于容器引导程序上的异常。

由于存储库为@Transactional,所以我知道在运行时将有一个会话。我如何使它工作,以便它在运行时注入AOP初始化的Session,但是在实例化仓库时不尝试解决它?

最佳答案

这种方法会给您带来很多麻烦。现在应该注入Session,而不是注入您现在自动作为单例作用域的SessionFactory。在Session带注释的方法中获取的@Transactional实例将遵守那些交易规则,例如:

@Transactional(readonly=true)
public List<Person> getPersons() {
  Session session = sessionFactory.getCurrentSession();
  //find those darn people.
}
@Autowired
private SessionFactory sessionFactory;

关于java - Spring -“后期绑定(bind)”自动接线 bean ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6927171/

10-13 04:38