cglib与jdk动态代理

不说大白话直接上代码
cglib 基于类

public class CglibTest {
	public static void main(String[] args) {
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(ServerImpl.class);
		enhancer.setCallback(new MethodInterceptor() {
			@Override
			public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
				System.out.println("前置处理");
				Object result = proxy.invokeSuper(obj, args);
				System.out.println("后置处理");
				return result;
			}
		});
		ServerImpl serverImpl = (ServerImpl)enhancer.create();
		serverImpl.doSend();
	}


}

class ServerImpl{
	static {
		System.out.println("hello");
	}
	public void doSend() {
		System.out.println("world");
	}
}

jdk 基于接口

public class JDKTest implements InvocationHandler{
    
	Object target;
	
	private JDKTest(Object target) {
		this.target = target;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("前置处理");
		Object result = method.invoke(target, args);
		System.out.println("后置处理");
		return result;
	}
	
	public Object create() {
		Class<? extends Object> class1 = target.getClass();
		Object newProxyInstance = Proxy.newProxyInstance(class1.getClassLoader(), class1.getInterfaces(), this);
		return newProxyInstance;
	}
	
	public static void main(String[] args) {
		Jdkmapper impl = new JdkServiceImpl();
		JDKTest jdkTest = new JDKTest(impl);
		Object object = jdkTest.create();
		Jdkmapper impl2 = (Jdkmapper)object;
		impl2.send();
		
	}
}

class JdkServiceImpl implements Jdkmapper{
	static {
		System.out.println("初始化");
	}

	@Override
	public void send() {
		System.out.println("send sms");
	}
	
}

interface Jdkmapper{
	void send();
}

调用的方法不能被private final static 修饰,否则aop代理会失效(spring事务失效的原因之一)

你可能感兴趣的:(wireshark,网络,测试工具)