每日一个技术点之动态代理

家电修理 2023-07-16 19:17www.caominkang.com电器维修

cglib和jdk 动态代理的区别?

  1. cglib 用的是asm字节码框架,而jdk用的是反射机制,这就导致了cglib创建对象慢但执行速度快 jdk创建对象快,但执行相对较慢
  2. 经过反编译发现jdk 动态代理是创建了一个继承了Proxy类的代理类并实现了接口,($class0 extends Proxy implements interfaceA )其中class0中聚合了很多接口中的方法,通过method.invoke反射机制实现调用。
  3. cglib 动态代理无需依赖接口,而需要依赖cglib库,jdk则需要依赖接口,并且不依赖库即可实现。

用途一般对于eb应用来说,jdk动态代理用途较广,针对没有目标接口的要代理的类则可以选择cglib动态代理

------------------------------- 2022.8.17--------------------------------------------------------------------------

如何使用?(以jdk 动态代理为例)

jdk动态代理强依赖于接口,所以我们需要创建一个接口


public interface MyActionInterface {
	void myAction(String username);
}

接口都是要实现的,之后创建一个实现类

public class MyActionImpl implements MyActionInterface{

	@Override
	public void myAction(String username) {
		System.out.println("action = " + username);
	}
}

最关键的一步来了,创建proxy代理handler

public class MyProxy implements InvocationHandler{
	
	private Object target;
	
	
	public MyProxy(Object target) {
		this.target = target;
	}
	
	
	public MyProxy(Class targetClass) {
		try {
			this.target = targetClass.neInstance();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	public Object neObject() {
		if (target == null) {
			thro ne RuntimeException("代理对象为空");
		}
		return Proxy.neProxyInstance(target.getClass().getClassLoader(),
				target.getClass().getInterfaces(), this);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) thros Throable {
		// TODO Auto-generated method stub
		//预处理
		Object result = method.invoke(target, args);
		//处理结果
		return result;
	}
}

调用

public class ProxyTest {
	public static void main(String[] args) {
		//注意返回的代理对象为接口对象,需要用接口对象作为返回类型
		MyActionInterface impl = (MyActionInterface)ne MyProxy(MyActionImpl.class)
				.neObject();
		impl.myAction("zyg");
	}
}
原理?源码?

https://baijiahao.baidu./s?id=1678997916718732701&fr=spider&for=pc

Copyright © 2016-2025 www.caominkang.com 曹敏电脑维修网 版权所有 Power by