【发布时间】:2010-11-10 10:33:24
【问题描述】:
我写了这个简单的例子:
//file TestController.java
public interface TestController {
public List<Test> findAll();
}
//file TestControllerImp.java
@Controller
public class TestControllerImp implements TestController{
@Autowired
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory=sessionFactory;
}
public List<Test> findAll() {
return sessionFactory.getCurrentSession().createQuery("from Test").list();
}
}
//file TestService.java
@Service
public class TestService {
@Autowired
private TestController controller;
public boolean flag=true;
public void setController(TestController controller){
this.controller=controller;
}
@Transactional
public List<Test> useController(){
flag=false;
return controller.findAll();
}
}
这是我的尝试:
TestService s1=context.getBean(TestService.class);
TestService s2=context.getBean(TestService.class);
List<Test> list=s1.useController();
System.out.println(s1.flag+" "+s2.flag);
现在奇怪的行为(我对 spring 很陌生):
- 如果我声明
@Transactional方法“useController()”,输出为:true true - 如果我将
@Transactional从TestService移动到TestControllerImp,并用@Transactional声明“findAll()”,则输出为:false false。
为什么我有这种行为?我知道默认情况下@Autowired 类是单音的,但为什么在第一种情况下标志仍然为真?
谢谢大家。
【问题讨论】:
标签: java hibernate spring transactional