JDK动态代理(Spring AOP理解的基础)


JDK动态代理(Spring AOP理解的基础)


步骤1:创建一个接口ILogin

package cn.edu.zju.cmj;

public interface ILogin
{
public boolean login(String username,String password);
}
2:创建这个接口的实现类LoginImpl

package cn.edu.zju.cmj;

public class LoginImpl implements ILogin
{

public boolean login(String username, String password)
{
  if(username.equals("zhangsan")&&password.equals("1111"))
  {
   return true;
  }
  else
  {
   return false;
  }
}
}

3.创建一个拦截器

package cn.edu.zju.cmj;

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

/**
* @author cmj
* @version 1.0
* JDK Proxy中的所有的拦截器都要实现java.lang.reflect.InvocationHandler
*/
public class LoginHandler implements InvocationHandler
{

//被代理的对象
private Object delegate;

public LoginHandler(Object delegate)
{
  this.delegate=delegate;
}

public Object invoke(Object proxy, Method method, Object[] args)
   throws Throwable
{
  System.out.println("===============before invoke=========");

  //调用真正的实现
  boolean bFlag=(Boolean) method.invoke(delegate, args);

  if(bFlag)
  {
   System.out.println("login success!");
  }
  else
  {
   System.out.println("login failed!");
  }

  System.out.println("===============after invoke=========");
  return method.invoke(delegate, args);
}

}
4.真正的代理运行

package cn.edu.zju.cmj;

import java.lang.reflect.Proxy;

public class ProxyDemo
{


public static void main(String[] args)
{
  //实现业务逻辑的类
  LoginImpl login=new LoginImpl();
  //JDK动态代理的拦截器,拦截器里需要保存业务逻辑类的对象
  LoginHandler handler=new LoginHandler(new LoginImpl());
  //创建业务逻辑类的动态代理类
  ILogin proxy=(ILogin) Proxy.newProxyInstance(login.getClass().getClassLoader(),
           login.getClass().getInterfaces(),
           handler);
  //动态代理类来调用方法      
  proxy.login("zhangsan", "1111");
}

}

你可能感兴趣的:(spring,jdk,AOP)