JDK动态代理实现拦截

来源:互联网 发布:淘宝店铺出售0 编辑:程序博客网 时间:2024/06/06 20:55


     需求:访问工资,根据权限判定是否有资格。需要打印日志以及安全性工作;

     实现类: Logger 类打印日志;

                 Security类安全处理;

                 SalaryManagerImpl类实现访问需求;

                 MyInterceptor类进行拦截后的请求处理;

                 Privilege权限类;


                 SalaryTest类进行测试请求;



Logger :

public class Logger {public void logging(){System.out.println("logging");      }}



Security:

public class Security {   public void security(){   System.out.println("security");         };}


privilege:

public class Privilege {   private String access;public String getAccess() {return access;}public void setAccess(String access) {this.access = access;}      }



SalaryManager:

public interface SalaryManager {public void showSalary();}


SalaryManagerImpl:

public class SalaryManagerImpl implements SalaryManager {public void showSalary() {          System.out.println("show salary");        }}



MyInterceptor:

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class MyInterceptor implements InvocationHandler {   private Object  target;   private Logger  logger;   private Security security;   private Privilege privilege;   public MyInterceptor(Object target,com.itheima12.jdkproxy.salary.Logger logger, Security security,Privilege privilege) {super();this.target = target;this.logger = logger;this.security = security;this.privilege = privilege;}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {/** * 1.启动日志 * 2.启动安全性类 * 3.验证权限; *    滴啊用目标对象的目标方法 */this.logger.logging();this.security.security();if("admin".equals(this.privilege.getAccess())){method.invoke(target);//目标方法}else{System.out.println("没有权限调侃工资!");}return null;}}


SalaryTest:

import java.lang.reflect.Proxy;import org.junit.Test;public class SalaryTest {@Testpublic void testSalary(){Object target = new SalaryManagerImpl();Logger logger=new Logger();Security security=new Security();Privilege privilege = new Privilege();privilege.setAccess("dgfg");MyInterceptor interceptor = new MyInterceptor(target,logger,security,privilege);SalaryManager proxy=(SalaryManager)Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), interceptor);proxy.showSalary();}}



原创粉丝点击