JDK动态代理

 Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类

package cn.jdk.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
 * jdk的动态代理
 * @author Administrator
 *InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,
 *每一个proxy代理实例都有一个关联的调用处理程序;
 *在代理实例调用方法时,方法调用被编码分派到调用处理程序的invoke方法。
 */
public class JdkProxy implements InvocationHandler {
	private UserDao userDao;

	public JdkProxy(UserDao userDao) {
		super();
		this.userDao = userDao;
	}
	public UserDao createProxy(){
		UserDao proxy=(UserDao) Proxy.newProxyInstance(userDao.getClass()
				.getClassLoader(),userDao.getClass().getInterfaces(), this);//还可以用匿名类
		return proxy;
		
	}
	//调用 目标对象的任何一个方法都相当于调用invoke()
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		// TODO Auto-generated method stub
		//如何是add方法执行多一个日志记录操作
		if("add".equals(method.getName())){
			//记录日志
			System.out.println("****************日志记录**************");
			Object result=method.invoke(userDao, args);
	
		}
		return method.invoke(userDao ,args);
	}
}

测试方法 :

package cn.jdk.proxy;

import org.junit.Test;

public class SpringTest {
	//普通方法
	@Test
	public void test(){
		UserDao userDao=new UserDaoImpl();
		userDao.add();
		userDao.update();
	}
	//采用代理模式
	@Test
	public void demo2(){
		UserDao userDao=new UserDaoImpl();
		UserDao proxy=new JdkProxy(userDao).createProxy();//生成代理
		proxy.add();
		proxy.update();
	}
}

 关于动态代理,看了一个博客总结比较详细:https://blog.youkuaiyun.com/yaomingyang/article/details/80981004。有兴趣的可以延伸阅读。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值