反射的动态代理

来源:互联网 发布:平板炒股软件 编辑:程序博客网 时间:2024/05/28 15:51

创建一个接口

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 {@Overridepublic void add() {System.out.println("添加");}@Overridepublic void del() {System.out.println("删除");}@Overridepublic void update() {System.out.println("修改");}@Overridepublic 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;}@Overridepublic 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) *///UserMyInvocationHandler 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();}}



结果:
添加
删除
修改
查询
--------
权限校验
添加
日志记录
权限校验
删除
日志记录
权限校验
修改
日志记录
权限校验
查询
日志记录
--------
权限校验
登录
日志记录
权限校验
注册
日志记录
权限校验
开始
日志记录
权限校验
完成
日志记录
0 0
原创粉丝点击