一个很常见的设计的问题(AOP应用)

伍子V5 2007-04-11 02:22:49
系统里面很多表都有inmen和intime字段
要求记录数据增删改查的用户和时间
如果inmen存放在session里
则在service层的方法就无法直接获取inmen值
如果在service的方法都加上inmen和intime属性传值
则这样的设计显得很蹩脚

不知道通过AOP是否可以将这种功能和业务逻辑干净地分开
希望各位朋友分享一下好的经验
...全文
786 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangx1949 2007-05-09
  • 打赏
  • 举报
回复
那你往service层传什么参数?
没有FormBean或TO吗
computerclass 2007-05-08
  • 打赏
  • 举报
回复
mark
youandi79 2007-04-30
  • 打赏
  • 举报
回复
感觉没必要用aop。
强制Service的第一个参数为某种类型,调用Service的时候将用户信息作为参数传入
ServiceProxyHandler.java
public class ServiceProxyHandler implements InvocationHandler {

public Object invoke(Object proxy, Method method, Object args[]) throws Throwable {
if(!(args[0] instanceof ClientSession)) {
throw new ProcessingException("MSGID");
}
// LOG START
// TRANSACTION START

obj = invoke(method, args);

// LOG END
// TRANSACTION END
}
}

Action.java中service.doXXX(getClientSession(req), ....);

Db连接的时候也是通过ClientSession来创建的,这样即使在数据层也可以得到用户信息。

southben 2007-04-24
  • 打赏
  • 举报
回复
我觉得你要根据具体的情况,aop不便于系统的调试,如果不是很大的系统,建议使用filter的方式,
junit777 2007-04-23
  • 打赏
  • 举报
回复
不要为了aop而去aop
高无忌 2007-04-23
  • 打赏
  • 举报
回复
在保存到数据库后用filter作为切点,织入AOP切面
yeah920 2007-04-20
  • 打赏
  • 举报
回复
upp
lee5593 2007-04-15
  • 打赏
  • 举报
回复
如果要用aop来实现的话,首先必须让方法将领域对象当作参数传入,然后才能进行拦截赋值,然后采用java反射机制强制取到相应的属性直接进行赋值操作,需要处理好异常
yanluo129 2007-04-13
  • 打赏
  • 举报
回复
现在我们的系统采用
springMVC+spring+springJDBC
数据库是这样设计的
table
id
title
content
user_id
datetime


也就是说每插入一条记录都需要记录它的user_id和datetime
user_id存放在session里
datetime取当前时间
我现在就是头疼怎么在切入的模块里取session
另外怎样把与业务字段在一个表里的数据更新进去
难道每做一次插入/更新业务数据都需要再更新一次以保存user_id和datetime
这样的设计是不是会影响性能

===============================

切入的模块式可以取得被切入模块的参数的
也就是切入以后的效果是相当于在一个类中,你可以对原模块里的数据进行操作

重复保存数据问题 你可以将连接点选择在 保存数据之前,
也就是 在插入user_id和datetime数据后在一同保存入数据库

这些都取决于你选择的连接点
chinagaici 2007-04-13
  • 打赏
  • 举报
回复
可以,用一个filter或者aop在逻辑开始的时候把username保存到数据库的一个变量里,然后,写一个trigger去插入日期和时间, 所以, 你的业务逻辑层就可以不管这两个字段了
伍子V5 2007-04-13
  • 打赏
  • 举报
回复
现在我们的系统采用
springMVC+spring+springJDBC
数据库是这样设计的
table
id
title
content
user_id
datetime


也就是说每插入一条记录都需要记录它的user_id和datetime
user_id存放在session里
datetime取当前时间
我现在就是头疼怎么在切入的模块里取session
另外怎样把与业务字段在一个表里的数据更新进去
难道每做一次插入/更新业务数据都需要再更新一次以保存user_id和datetime
这样的设计是不是会影响性能

yanluo129 2007-04-13
  • 打赏
  • 举报
回复
也就是切入以后的效果是相当于在一个类中,你可以对原模块里的数据进行操作

========================

补充下 : 是指可以使用AOP的具体手段得到原模块的各种属性
伍子V5 2007-04-12
  • 打赏
  • 举报
回复
有没有朋友能够讲的更详细一些
我也知道可以

但就是一时不知道如何下手
yanluo129 2007-04-12
  • 打赏
  • 举报
回复
你使想将log功能分离吧;
1.在原系统设计里面完全不需要考虑LOG功能
2.将LOG功能模块化
3.在原系统里选择连接点,使用AOP将LOG模块功能织入系统

比如选择用户某个操作为连接点
用AOP方法将LOG计时功能连接到该操作,就得到纪录该用户操作时间功能






schumiXsuse 2007-04-11
  • 打赏
  • 举报
回复
aop could used in log , security , transcaction and so on.....
yanluo129 2007-04-11
  • 打赏
  • 举报
回复
可以 AOP就是为了实现逻辑分离设计的

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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