JDK动态代理

jdk动态代理是java.lang.reflect.*包提供的方式,必须接住接口才能产生代理对象,所以需要先创建一个接口:

public interface HelloWorld{
	public void sayHelloWorld();
}

再提供HelloWorldImpl来实现这个接口:

public class HelloWorldImpl implements HelloWorld {
	@Override
	public void sayHelloWorld() {
		System.out.println("Hello World!");
	}
}

以上就是最简单的接口和实现类的关系,现在可以开始代理了。要实现代理需要分两个步骤:

  1. 建立代理对象和真实服务对象的关系
  2. 实现代理逻辑
    在JDK的动态代理中,要实现代理逻辑类必须实现java.lang.reflect.InvocationHandler接口,这个接口中定义了一个invoke()方法,并提供了接口数组来挂载代理对象:
public class JdkProxyExample implements InvocationHandler{
	private Object target = null;
	
	public Object bind(Object target) {
		this.target = target;
		return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
		
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("进入代理方法");
		System.out.println("调用真实方法之前。。。");
		Object object = method.invoke(target, args);
		System.out.println("调用真实方法之后。。。");
		return object;
	}
	
	public void testJdkProxy() {
		JdkProxyExample jdkProxyExample = new JdkProxyExample();
		HelloWorld proxy = (HelloWorld) jdkProxyExample.bind(new HelloWorldImpl());
		proxy.sayHelloWorld();
	}
	public static void main(String[] args) {
		JdkProxyExample example = new JdkProxyExample();
		example.testJdkProxy();
	}

}

接下来测试一下代理逻辑的调用:

public void testJdkProxy() {
	JdkProxyExample jdkProxyExample = new JdkProxyExample();
	HelloWorld proxy = (HelloWorld) jdkProxyExample.bind(new HelloWorldImpl());
	proxy.sayHelloWorld();
}

此时,在调用打印Hello World前后都可以加入其他逻辑,即实现了JDK的动态代理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值