package javaproxy;
/*
* 定义一个数据访问层接口
*/
public interface Dao {
//模拟数据保存
public void save();
}
package javaproxy;
public class DaoImpl implements Dao{
@Override
public void save() {
System.out.println("执行一个保存方法。。。。。。。。。。。。");
}
}
package javaproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DaoHandler implements InvocationHandler{
private Object obj;
public DaoHandler(Object obj) {
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("do something before method");//这里模拟AOP的前置方法
Object ret = method.invoke(this.obj, args);
System.out.println("do something after method");//这里模拟AOP的后置方法
return ret;
}
}
package javaproxy;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
// 元对象(被代理对象)
DaoImpl daoImpl = new DaoImpl();
// 业务代理类
DaoHandler daoHandler=new DaoHandler(daoImpl);
Dao dao=(Dao) Proxy.newProxyInstance(daoImpl
.getClass().getClassLoader(), daoImpl.getClass()
.getInterfaces(), daoHandler);
dao.save();
}
}
package javaproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MapperProxy implements InvocationHandler {
@SuppressWarnings("unchecked")
/*
* 这里通过静态方法得到实现类的对象
*
* @param:接口
*
* @param:用sqlsession执行方法
*
* @return: 返回代理对像
*/
public static <T> T newMapperProxy(Class<T> mapperInterface,
Object sqlSession) {
ClassLoader classLoader = mapperInterface.getClassLoader();
Class<?>[] interfaces = new Class[] { mapperInterface };
MapperProxy proxy = new MapperProxy();
return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);
}
/*
* (non-Javadoc)
*
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,
* java.lang.reflect.Method, java.lang.Object[])
*
* @param:代理对象
*
* @param:方法通过方法名字找到对应的方法
*
* @param:通过方法传入对象找到对应的传递参数映射
*
* @return:返回执行后的参数对象
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// 这里通过方法名字以及参数通过解析对应的mapper来执行对应的操作
System.out.println("在这里执行实际方法");
return null;
}
}
package javaproxy;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
Dao dao=MapperProxy.newMapperProxy(Dao.class, null);
dao.save();
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有