JDK动态代理简单小程序

Jdk动态代理

1.动态代理使用的情况:需要在多个方法上加上相同的逻辑的时候,需要用到动态代理。
  原因:在多个方法上写相同的逻辑,第一费事,第二在不用的时候维护麻烦

使用动态代理需要用到两个类:分别为Proxy,InvocationHandler,用InvocationHandel来实现JDK中动态代理的接口,Proxy来生成对应的类的代理类。

代码来说明
  首先创建一个类来实现InvocationHandel
  
package cn.csdn.service;

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

//动态代理实现
public class LogInterceptor implements InvocationHandler {
	// 被代理对象
	private Object target;

	public Object getTarget() {
		return target;
	}

  // 通过往里面设置值来确定被代理的对象
	public void setTarget(Object target) {
		this.target = target;
	}

	public void beforeMethod() {
		System.out.println("拦截的功能");
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		beforeMethod();
	// 调用被代理的对象    target是传过来的那个接口     args是接口所对应的类
		method.invoke(target, args);
		return null;
	}
}

然后再创建代理类对象
	@Test
	public void test() {
		//被代理对象     把这个接口对应的方法加上逻辑   是它要进行代理
		UserDao userDao = new UserDaoImpl();
		
		//实现了InvocationHander的接口的类        
		LogInterceptor logInterceptor = new LogInterceptor();
		logInterceptor.setTarget(userDao);
		
		//三个参数 (classLoader, 被代理对象都实现类哪些接口,进行代理的类)
	UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(),new Class[]{UserDao.class}, logInterceptor);
		userDaoProxy.addUser();
		userDaoProxy.delete();
	}
注:new Class[]{UserDao.class}  和 UserDao.getClass().getInterfaces()是一样的,前者是数组,肯定定义多个接口,后者是定义一个接口

UserDao和UsreDaoImpl中就是放了两个方法,分别为addUser(),delete()

UserDao接口
public interface UserDao {
	public void addUser();
	public void delete();
}

UserDaoImpl类
public class UserDaoImpl implements UserDao {
	@Override
	public void addUser() {
		// TODO Auto-generated method stub
		System.out.println("添加啦=======");
	}
	@Override
	public void delete() {
		// TODO Auto-generated method stub
		System.out.println("删除操作==");  
	}
}

Junit测试的结果为:
拦截的功能
添加啦=======
拦截的功能
删除操作==
 
我们可以看到  我们在每一个调用的方法钱都加上了想要添加的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值