打字猴:1.700460981e+09
1700460981
1700460982 if(method.getName().equalsIgnoreCase(“login”)){
1700460983
1700460984 System.out.println(“有人在用我的账号登录!”);
1700460985
1700460986 }
1700460987
1700460988 return result;
1700460989
1700460990 }
1700460991
1700460992 }
1700460993
1700460994 看粗体部分,只要在代理中增加一个判断就可以决定是否要发送信息,运行结果如下:
1700460995
1700460996 开始时间是:2009-8-25 10:45
1700460997
1700460998 登录名为zhangSan的用户 张三登录成功!
1700460999
1700461000 有人在用我的账号登录!
1700461001
1700461002 张三在打怪!
1700461003
1700461004 张三又升了一级!
1700461005
1700461006 结束时间是:2009-8-26 03:40
1700461007
1700461008 太棒了!有人用我的账号就发送一个信息,然后看看自己的账号是不是被人盗了,非常好的方法,这就是AOP编程、AOP编程没有使用什么新的技术,但是它对我们的设计、编码有非常大的影响,对于日志、事务、权限等都可以在系统设计阶段不用考虑,而在设计后通过AOP的方式切过去。既然动态代理是如此地诱人,我们来看看通用动态代理模型,类图如图12-8所示。
1700461009
1700461010
1700461011
1700461012
1700461013 图12-8 动态代理通用类图
1700461014
1700461015 很简单,两条独立发展的线路。动态代理实现代理的职责,业务逻辑Subject实现相关的逻辑功能,两者之间没有必然的相互耦合的关系。通知Advice从另一个切面切入,最终在高层模块也就是Client进行耦合,完成逻辑的封装任务。我们先来看Subject接口,如代码清单12-25所示。
1700461016
1700461017 代码清单12-25 抽象主题
1700461018
1700461019 public interface Subject{
1700461020
1700461021 //业务操作
1700461022
1700461023 public void doSomething(String str);
1700461024
1700461025 }
1700461026
1700461027 其中的doSomething是一种标识方法,可以有多个逻辑处理方法,实现类如代码清单12-26所示。
1700461028
1700461029 代码清单12-26 真实主题
1700461030
[ 上一页 ]  [ :1.700460981e+09 ]  [ 下一页 ]