创建一个接口
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();
}
}
添加
删除
修改
查询
--------
权限校验
添加
日志记录
权限校验
删除
日志记录
权限校验
修改
日志记录
权限校验
查询
日志记录
--------
权限校验
登录
日志记录
权限校验
注册
日志记录
权限校验
开始
日志记录
权限校验
完成
日志记录
本文介绍了一个具体的Java动态代理实现案例,通过定义接口和实现类,使用JDK提供的动态代理机制来增强方法的功能,如权限验证和日志记录。
527

被折叠的 条评论
为什么被折叠?



