首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

Spring AOP , aspect施用时的思路

2013-04-02 
Spring AOP , aspect使用时的思路我们公司的一个项目,已经快完工了, 在dao层里做了记录日志,把每次对数据

Spring AOP , aspect使用时的思路
我们公司的一个项目,已经快完工了, 在dao层里做了记录日志,把每次对数据库的操作的 sql 语句都记录下来了

但现在想把用户的 ip 也给添加到日志里面去

原本是打算,在 controller 里,把 request 对象一层一层往下传递,传到 dao 层,然后取出通过request取出客户端ip,在把ip记录下来,可是这样太过于麻烦了,几乎要改所有的 service层和dao层(添加request这个参数)

我现在想,利用 aspect 的@befor, 每次调用 controller 里的方法时,都把 request 这个对象给截取出来,然后取出 ip ,把ip 存放在某个地方, 等到执行到 dao 层中的时候, 在把刚存起来的 ip 给取出来. 这样的话,不用修改太多代码.


现在问题是, @Befor 已经截取到 request了,并且取到了ip,问题是该把这个ip存放在哪呢?以什么样的形式存呢?在在dao层里,又怎样找到这个存起来的ip呢?


望高人指点思路!!!! 万分感激.如果觉得我表述不是很清楚,说一声,我贴一些源码上来
[解决办法]
用个单例嘛,这个单例里放的是一个list集合
[解决办法]
加一个abstract controller, 获取id,
其他的extends这个abstract controller就可以了。
[解决办法]
多线程中需要保持自身状态的,用ThreadLocal

看下API吧
[解决办法]
比较难实现,多线程情况下很难办到,因为你前面跟后面是完全脱节的,如果你用单例的话,会担心别的线程修改值。 或许你可以考虑关联记录。aop记录ip相关的东西,dao记录sql信息。在aop记录ip的时候关联上sql,这样可能会比较容易实现

热点排行