现在的位置: 首页 > 综合 > 正文

java实现动态代理 → AOP

2013年03月03日 ⁄ 综合 ⁄ 共 1566字 ⁄ 字号 评论关闭

 

AOP现在很多框架都有这个功能,但是java自身也有这个功能,只不过要自己进行一下手动编写,才能够实现,不过其原理都差不多。

起重要用的java类包有

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

其实现原理大概是这样,

1.编写代理处理函数 其必须事先java.lang.reflect.InvocationHandler接口

2.首先写一个接口

3.编写实现此接口的方法

5.编写客户端程序

Let'S go!

for  example:

第一步,编写代理处理类

 

  1. import java.lang.reflect.InvocationHandler;  
  2. import java.lang.reflect.Method;  
  3. import java.lang.reflect.Proxy;  
  4. public class Handler implements InvocationHandler{  
  5.   private Object obj;  
  6.   public Object bind(Object obj){  
  7.    this.obj=obj;  
  8.    return Proxy.newProxyInstance(obj.getClass().getClassLoader(),  
  9.          obj.getClass.getInterfaces(),this)  
  10.   }  
  11.   public Object invoke(Object proxy,Method method,Object[] args)throws Throwable{  
  12.    System.out.println("began");  
  13.    Object result=method.invoke(this.obj,obj);  
  14.    System.out.println("after");  
  15.    return result;  
  16.   }  
  17. }  

 

第二步,写接口

 

  1. public interface IHello {  
  2.     public void toHello(String name);  
  3. }  

 

第三步,实现接口

 

  1. public class HelloImp implements SayHello{  
  2.     public void toHello(String name) {  
  3.         System.out.println("hello:" + name);  
  4.     }  
  5. }  

 

第四步,客户端调用

 

  1. public class ProxyDemo {  
  2.     public static void main(String[] args) throws SecurityException, NoSuchMethodException {  
  3.           
  4.         LogHandler logHandler = new LogHandler();  
  5.           
  6.         SayHello hello = (SayHello)logHandler.bind(new HelloImp());  
  7.           
  8.         hello.toHello("hello");  
  9.           
  10.     }  
  11. }  

 

 

抱歉!评论已关闭.