RSS订阅欢迎来到Java程序员学习天地!
你的位置:首页 » JAVA » 正文

JAVA实现AOP

选择字号: 超大 标准 发布时间:2017年05月27日 | 作者:amour505 | 0个评论 | 177人浏览

   最近面试被问到aop的实现,今天花点时间总结了下,其实aop的实现采用的JAVA动态代理的模式,以下用代码来说明:


  1. 首先需要定义一个接口,因为代理机制是面向接口的:


    public interface mainInterface{    void doSomething();

    }

      然后实现该接口

      public class mainTest implements mainInterface{    void doSomething(){

     System.out.print("呵呵呵呵")};

}  

2.其次我们来定义一个Advice接口如下:

  public interface Advice

   beforMethod(Method method);

   afterMethod(Method method);

  }

然后实现该接口

  public class mainAdvice implements  Advice{

    beforMethod(Method method){

     system.out.print(method.getName()+"方法之前调用"); 

   };

    afterMethod(Method method){

     system.out.print(method.getName()+"方法之后调用"); 

  };

}

3.然后在定义一个Handle让其实现InvocationHandler接口,假设命名为mainHandler,代码如下:

 public class mainHandler implements InvocationHandler{

 private Object target;  

 private Advice ad;

 public void mainHandler(Object target,Advice ad){

  this.target = target;

   this.ad = ad;

  }

  public Object getTarget() {     

         return target;   }   

 public void setTarget(Object target) {     

       this.target = target;   }   

 public Advice getAd() {      

       return ad;   }   

 public void setAd(Advice ad) {       

       this.ad = ad;   }

@Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

    ad.beforMethod(method);

    method.invoke(target,args);

    ad.afterMethod(method);  

}

}

4.到此动态代理基本完成,最后我们可以定义一个对象工厂:

  public class  mainFactory{

    private static Object getMainObject(Class clz,Advice ad){

    //获取代理对象        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),                obj.getClass().getInterfaces(), new mainHandle(clz.newInstance(),ad));

}

}

这就是aop简单的实现,其中便于编写,代码中包和引入类没有编写,大家仅作为参考。

标签:Java基础aop

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

控制面板
您好,欢迎到访网站!
随机文章
热门文章
热评文章
最近发表