JDK动态代理的使用

                                                                              JDK动态代理的使用(Java)
                                        
    JDK动态代理是Spring框架中一个重要的知识点,也是一种最常用的动态代理。JDK动态代理是java.lang.reflect.*包提供的方式,必须借助一个接口才能产生代理对象。所以可以先定义接口,再创建一个实现类来实现接口,最后就可以进行动态代理的实现了。
第一步先定义接口:

package com.soft.service;

public interface User {
	
	public void save();
	public void update();
	public void delete();
	public void find();
	
}

第二步提供一个实现类来实现接口:

package com.soft.service;

public class UserImpl implements User {

	public void save() {
		System.out.println("保存!");
	}

	public void update() {
		System.out.println("更新!");
	}

	public void delete() {
		System.out.println("删除!");
	}

	public void find() {
		System.out.println("查找!");
	}

}

完成以上后便可以开始进行动态代理了。

动态代理的实现:

package com.soft.service;

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


public class ProxyTest1 {
	public static void main(String[] args) {
		
		//真实对象--既目标对象
		final UserImpl target = new UserImpl();
		
		//动态创建代理对象
		/*
		 * 把生成的动态代理对象挂在接口下
		 * 显然UserImpl对象的接口是User
		 */
		User proxy = (User) Proxy.newProxyInstance(
				target.getClass().getClassLoader(),
				target.getClass().getInterfaces(),
				new InvocationHandler() {
					//代理对象调用接口相应方法 都是调用invoke
					/*
					 * proxy:是代理对象
					 * method:代表的是目标方法的字节码对象
					 * args:代表是调用目标方法时参数
					 */
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						System.out.println("调度前");
						//反射知识点
						Object invoke = method.invoke(target, args);//目标对象的相应方法
						System.out.println("调度后");
						return invoke;
					}
				}
		);
		
		proxy.save();//调用invoke---Method:目标对象的save方法  args:null 返回值null
		proxy.find();//调用invoke---Method:目标对象的find方法  args:null 返回值null
		
	}
}

运行结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值