Java动态代理实现

Java动态代理使用接口进行代理。不直接实例化目标类,而是通过动态代理类生成,这样在这个动态代理中调用目标类的时候就可以在方法前后调用逻辑。

代码如下:

1、创建基本实现类和实现接口:

</pre><pre name="code" class="java">package com.array7.dymamic_proxy;

public interface IHelloWorld {
	public void sayHello();
}

package com.array7.dymamic_proxy;

public class HelloWorld implements IHelloWorld{

	@Override
	public void sayHello() {
		System.out.println("Hello World!");
	}

}

2、创建动态代理类:

package com.array7.dymamic_proxy;

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

public class HelloWorldProxy<T> implements InvocationHandler{
	T target = null;
	@SuppressWarnings("unchecked")
	public T bind(T target) {
		this.target = target;
		return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		this.doBefore();
		T result = (T) method.invoke(target, args);
		this.doAfter();
		return result;
	}

	private void doBefore() {
		System.out.println("start...");
		
	}

	private void doAfter() {
		System.out.println("end...");
	}
}

3、测试:

package com.array7.dymamic_proxy;

public class HelloWorldTest {
	public static void main(String[] args) {
		HelloWorldProxy<IHelloWorld> proxy = new HelloWorldProxy<IHelloWorld>();
		IHelloWorld helloWorld = proxy.bind(new HelloWorld());
		helloWorld.sayHello();
	}
}

4、结果输出:

start...
Hello World!
end...

5、其他:

Jdk自动动态代理的实现必须代理接口,当需要代理具体实现类时候需要使用Cglib,在Spring AOP中提供JDK动态代理和cglib动态代理的实现。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值