您的位置:首页 > 其它

反射的动态代理

2015-09-21 12:24 288 查看
创建一个接口

package com.reflect.demo;

public interface UserDao {
public abstract void add();
public abstract void del();
public abstract void update();
public abstract void find();
}


创建一个实现接口类

package com.reflect.demo;

public class UserDaoImpl implements UserDao {

@Override
public void add() {
System.out.println("添加");
}

@Override
public void del() {
System.out.println("删除");
}

@Override
public void update() {
System.out.println("修改");
}

@Override
public void find() {
System.out.println("查询");
}

}
基本操作

package com.reflect.demo;

public class UserDaoDemo {
public static void main(String[] args) {
/*
* 基本操作1
*/
UserDao ud = new UserDaoImpl();
ud.add();
ud.del();
ud.update();
ud.find();
System.out.println("--------");
/*
*
*/
UserDao ud2 = new UserDaoImpl();
ud2.add();
ud2.del();
ud2.update();
ud2.find();
System.out.println("--------");

}
}


创建

package com.reflect.demo;

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

public class MyInvocationHandler implements InvocationHandler {
private Object target;

public MyInvocationHandler(Object target) {
this.target = target;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("权限校验");
Object result = method.invoke(target, args);
System.out.println("日志记录");
return result; //返回代理对象
}

}


综合实现

package com.reflect.demo;

import java.lang.reflect.Proxy;

public class DynamicProxyTest {
public static void main(String[] args) throws Exception{
/*
* 基本操作1
*/
UserDao ud = new UserDaoImpl();
ud.add();
ud.del();
ud.update();
ud.find();
System.out.println("--------");
/*
* 动态代理对象 pulic static Object newProxyInstance(ClassLoader loader,
* Class<?>[] interfaces,InvocationHandler h)
*/
//User
MyInvocationHandler handler = new MyInvocationHandler(ud);
UserDao proxy = (UserDao) Proxy.newProxyInstance(ud.getClass()
.getClassLoader(), ud.getClass().getInterfaces(), handler);
proxy.add();
proxy.del();
proxy.update();
proxy.find();
System.out.println("--------");
//Student
/*
* 动态代理 多个
*/
StudentDao sd = new StudentDaoImpl();
sd.login();
sd.regist();
sd.start();
sd.finish();
System.out.println("--------");
MyInvocationHandler handler1 = new MyInvocationHandler(ud);
StudentDao proxy1 = (StudentDao) Proxy.newProxyInstance(ud.getClass()
.getClassLoader(), ud.getClass().getInterfaces(), handler1);
proxy1.login();
proxy1.regist();
proxy1.start();
proxy1.finish();
}
}


结果:

添加

删除

修改

查询

--------

权限校验

添加

日志记录

权限校验

删除

日志记录

权限校验

修改

日志记录

权限校验

查询

日志记录

--------

权限校验

登录

日志记录

权限校验

注册

日志记录

权限校验

开始

日志记录

权限校验

完成

日志记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: