hibernate Spring 框架下,IOC注入以及事务的问题. 50

系统有轮询程序定时执行任务.在轮询Poller类里用@Resource引入了AService.AService本身的注解是@Service和@Transactional,... 系统有轮询程序定时执行任务.在轮询Poller类里用@Resource引入了AService.
AService本身的注解是@Service 和@Transactional,Service里面有用@Resource引入了的其他Sevice和Dao.
开始的时候没有加@Transactional,系统运行时候提示no Session bound Thread(这个时候所有的注入都是正常的.)
后来加上注解@Transactional
当执行任务时,Aservice里面所有用@Resource引入的全为 null;在Aservice里面执行this.dao.update()报控指针.
到后面我发现改成 this.getDao.update().就能正常执行了.
之所以我发现能这么调用是因为我发现往AService对象里面set值set不进去,进入set方法前为属性空,进入set方法里,属性有值,出了set方法值又为空了.打断点的话,发现set方法并不是直接执行,貌似还经过代理.我就想到用this.getDao()代替this.dao去执行调用.

最后就出现了奇怪的情况,在Poller里面的AService对象本身用@Resource正常注入了,但是它的@Resource注解的属性 (例如dao)却是空,同时,却又可以通过get方法(如getDao())获取到正常的对象去调用.

这是什么情况?我感觉是和代理有关,有高手指点一下么?
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏50(财富值+成长值)
armslave88
2015-02-01 · TA获得超过416个赞
知道小有建树答主
回答量:535
采纳率:100%
帮助的人:462万
展开全部
我想问你的类是否遵循了Bean的要求,有构造方法,有序列化标识,注解在底层依然是由容器替我们去创建bean对象,用bean对象需要遵守默认的约定。不知道对你是否有帮助。
追问

序列化?那不是数据库对应的entity才需要去实现的接口么.

容器明显是创建bean成功了啊.(不然初始化的时候就报错了把).而且在其他地方也能正常调用..只是在这个Poller(这个类本身也是附加了@Service注解的)类里面的AService里面的调用必须用getDao()这样的方法才能正常使用配置的bean对象.直接this.dao获取不到.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式