jdk动态代理

1、动态代理

通过java反射或者字节码技术自动帮助我们在运行的时候创建代理类对象!

2、动态代理有几种?

JDK动态代理

CGLIB动态代理

3、JDK动态代理模式

创建抽象主题角色(说的那么高大上,其实就是接口):

public interface Subject {
	void send();
}

 

创建被代理类(其实就是接口的主实现类

public class RealSubject implements Subject {

	public void send() {
		System.out.println("实现主要业务逻辑");
	}

}

用jdk创建动态代理

public class SubjectProxy implements InvocationHandler{
	//被代理类对象
	private Object obj;
	public SubjectProxy(Object obj) {
		this.obj = obj;
	}
	//实现invoke方法,通过method反射拿到obj的对象
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("》》》》实现日志打印,或者其他操作");
		Object invoke = method.invoke(obj, args);//java反射机制执行目标对象方法
		System.out.println("》》》》实现日志打印,或者其他操作结束");
		return invoke;
	}
	/***
	 * 使用jdk创建代理类
	 * 
	 */
	@SuppressWarnings("unchecked")
	public <T> T getProxy(){
		return  (T) Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
	}
}

main运行:

public class SubjectMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//新建代理类,这个返回值必须是接口,否则将会报错
		Subject proxy = new SubjectProxy(new RealSubject()).getProxy();
		proxy.send();

	}

}

下一章:GCGLIB动态代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值