求解:Spring的AOP与IOC的冲突问题

langlan4744 2010-06-07 11:59:24
在系统运行正常的情况下
为了添加日志记录功能:采用aop进行在某个切入点加入日志,记录日志需要用到用户的一些信息,因此采用ThreadLocal方案将Struts2的Action对象中的Session属性添加到ThreadLocal当中(session属性在实现SessionAare接口后由Struts注入)
具体作法为:配置切入点在...Action的setSession(Map..)之中,配置切入逻辑.
具体运行时切入逻辑中的调试信息正常打印出来,但是随后在action的处理方法里出现了NullPointerException,说明Service对象没有被注入成功,将AOP功能去掉之后,程序又恢复正常.
很明显是Spring的AOP拦截Struts2的自动注入后影响到了Spring对Service层对象的注入.
不知道是否有哪位大哥遇到过类似的问题,或者知道其中原由,望众位大大们不吝赐教,小弟感激不尽.在线等答案.
...全文
163 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
JustingF 2012-08-28
  • 打赏
  • 举报
回复
我也遇到过这样的问题;
解决方法:
将定义在Action中的Service对象名设置与类同名,例:ExampleService exampleService;
这样就可以自动注入,不报出NullPointerException;可能是因为添加aop后,注入方法只能通过识别名称来查找类。
wgm1111 2011-03-09
  • 打赏
  • 举报
回复
请问楼主问题最后怎么解决了? 我最近也碰到了这样的问题。
langlan4744 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qingzhe2008 的回复:]
没遇到过,帮顶
[/Quote]谢谢哥们!!!
qingzhe2008 2010-06-08
  • 打赏
  • 举报
回复
没遇到过,帮顶
lq282514781 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bearkin 的回复:]

。。。。感觉你的做法不太对劲啊 ThreadLocal你是怎么使用的?
[/Quote]我也有同感
BearKin 2010-06-08
  • 打赏
  • 举报
回复
。。。。感觉你的做法不太对劲啊 ThreadLocal你是怎么使用的?
langlan4744 2010-06-08
  • 打赏
  • 举报
回复
另外action对象的创建是交给struts2-spring-plugin-2.1.8.1.jar来管理的.
其中action包中有个BaseAction,里面继承了SessionAware接口,所有真正用到的Action类全部从BaseAction继承.
又作了一些实验:
1.如果拦截BaseAction的话,会拦截到其中的setSession方法
2.但是如果直接拦截BaseAction的某个子类(即由插件管理的)的话,不会拦截到setSession方法
3.在情况2下,把切入点语法改成拦截所有方法的话,同样拦截不到任何一个方法.
是不是由"插件"管理起来的action无法进行aop拦截.
是不是直接拦截父类对象后,会影响到spring对"插件"所管理起来的那些action对象的注入操作.
langlan4744 2010-06-08
  • 打赏
  • 举报
回复
睡觉了,明天再等
langlan4744 2010-06-08
  • 打赏
  • 举报
回复
问题不在ThreadLocal,即使ThreadLocal部分暂时不实现只要拦截了setSession方法,那么setXxxService方法就不(上面掉了个不字)会被Spring注入了.
langlan4744 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bearkin 的回复:]
。。。。感觉你的做法不太对劲啊 ThreadLocal你是怎么使用的?
[/Quote]
问题不在ThreadLocal,即使ThreadLocal部分暂时不实现只要拦截了setSession方法,那么setXxxService方法就会被Spring注入了.

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧