动态代理


 
 
------java.lang.reflect.Proxy类

Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。

public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 
 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。

-----java.lang.reflect.InvocationHandler 接口

InvocationHandler 是代理实例的调用处理程序 实现的接口。

 

----------------使用举例

public interface UserDAO {
  String getNameById(int id);
 void save(User user);

}

public class UserDAOImpl{

   String getNameById(int id){

         String name="";

         do something..

         retrurn name;

 }

}

class MyInterceptor implements InvocationHandler{
 Object obj=null;
 public MyInterceptor(Object obj){
  this.obj=obj;
 }
 public Object invoke(Object proxy, Method method, Object[] args)
   throws Throwable {
      System.out.println("--------interceptor begin--------");

      do something... //在方法被调用之前,做一些事件
      Object result=null;
      result=method.invoke(obj, args);

       do something... //在方法被调用之后,做一些事件
      System.out.println("--------interceptor end  --------");

      return result;
 }

}

public class TestDemo{

  public static main(String[] arg){

   UserDAO dao=null;
   dao = new UserDAO;  //创建一个UserDAO

   Interceptor it=new Interceptor(dao);  //创建一个InvocationHandler

   dao=(UserDAO)Proxy.newProxyInstance(dao.getClass()
   .getClassLoader(), dao.getClass().getInterfaces(), it);   //使用Proxy创建以UserDAO为接口的代理类

 




 

你可能感兴趣的:(DAO)