动态代理使用步骤(一)

动态代理:

	  ** 创建代理类:**
	  1. 创建代理类,此类需要实现InvocationHandler接口
	  2. 接口中有一个invoke方法
	  3. 在代理类中声明一个Object对象,使用构造方法对其进行初始话
	  4. invoke方法有三个参数:
	 		在此方法中利用反射,执行Object对象的method方法,并在其前后进行增强
	 ** 动态代理类的使用:**
	 1.new一个被代理类对象转型成接口
	 2.将代理类对象作为代理类构造函数参数构造代理类
	 3.调用Proxy.newProxyInstance:
	 		依次传入:代理类的构造器,被代理对象接口,代理类对象
	 		返回一个Object对象
	 4.将返回来的对象强转为被代理类的接口即完成了被代理类的增强
	 5.调用对象方法查看结果。。。
  1. 代理类:
//这是用来增强的代理类。。。
public class ProxyHandler implements InvocationHandler {
	
	Object obj = null;
	public ProxyHandler(Object obj) {
		this.obj=obj;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Object object = method.invoke(obj, args);
		System.out.println("这是用来增强原来方法额的逻辑代码。。。");
		return object;
	}

}
  1. 被代理接口:
 public interface DeleteByEmpnoSer {
	public String del(int emp,String s);
}
  1. 被代理接口实现类:
public class DeleteByEmpnoService implements DeleteByEmpnoSer{
	
	@Override
	public String del(int emp, String s) {
		System.out.println("这是原方法的输出:"+emp+","+s);
		return "返回值:"+s+","+emp;
	}
}
  1. 动态代理的使用:
public class Test {

	public static void main(String[] args) {
		DeleteByEmpnoSer dbes = new DeleteByEmpnoService();
		//
		ProxyHandler handler = new ProxyHandler(dbes);
		//
		Object npi = Proxy.newProxyInstance(ProxyHandler.class.getClassLoader(), dbes.getClass().getInterfaces(), handler);
		
		DeleteByEmpnoSer dbe=(DeleteByEmpnoSer)npi;
		
		dbe.del(1, "s");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值