欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

模拟实现spring的AOP代码,springaop代码,package com.

来源: javaer 分享于  点击 39522 次 点评:123

模拟实现spring的AOP代码,springaop代码,package com.


package com.s2sh.intercepetor; public interface IHello {     public void sayHello(String name);     public void sayGoogBye(String name); } package com.s2sh.intercepetor; public class Hello implements IHello {     public void sayGoogBye(String name) {         // TODO Auto-generated method stub         System.out.println(name+" GoodBye!");     }     public void sayHello(String name) {         // TODO Auto-generated method stub         System.out.println("Hello " + name);     } } package com.s2sh.intercepetor; public class Logger {     public static void before() {         System.out.println("开始了");     }     public static void after() {         System.out.println("结束了");     } } package com.s2sh.intercepetor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DynaProxyHello implements InvocationHandler {     private Object delegate;//被代理的对象     public DynaProxyHello(Object delegate) {         this.delegate = delegate;     }     public Object invoke(Object proxy, Method method, Object[] args)             throws Throwable {         // TODO Auto-generated method stub         Object result = null;         try {             // 执行原来的方法之前记录日志             Logger.before();             // JVM通过这条语句执行原来的方法(反射机制)             result = method.invoke(this.delegate, args);             // 执行原来的方法之后记录日志             Logger.after();         } catch (Exception e) {             e.printStackTrace();         }         // 返回方法返回值给调用者         return result;     } } package com.s2sh.intercepetor; import java.lang.reflect.Proxy; public class Test {     public static void main(String[] args) {         // ①目标业务类         IHello target = new Hello();         // ② 将目标业务类和横切代码编织到一起         DynaProxyHello handler = new DynaProxyHello(target);         // 创建代理类         IHello proxy = (IHello) Proxy.newProxyInstance(                                            target.getClass().getClassLoader(), //返回目标类的类装载器,保持两个类的类装载器一样                                            target.getClass().getInterfaces(), //返回目标类实现的接口,保证组合而成的代理类也实现这些接口                                            handler//指派谁去处理方法的对象                                             );         // ④ 操作代理实例         proxy.sayHello("张三");         proxy.sayGoogBye("李四");     } }//该片段来自于http://byrx.net
相关栏目:

用户点评