java 代理机制

java代理机制,从使用者的角度,可以实现针对接口进行调用。代理将针对接口的调用,传递给构造代理对象时传入的调用处理器InvocationHandler。

下面举个例子。

1,首先定义一个接口类。

 

package com.bestree.learn;

/**
 * 接口类。
 * @author bestree007
 *
 */
public interface Hello {
	public String sayHello(String str);
}

如何实现调用这个接口,从Java的角度接口类是不能实例化的。

2,现在构造InvocationHandler接口的实现

package com.bestree.learn;

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

/**
 * 代理处理类。针对接口的调用,会调用到这个类中的invoke方法。
 * @author bestree007
 *
 */
public class InvocationHandlerImpl implements InvocationHandler {

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println("invoke");
		return null;
	}

}


3,哈,现在试试调用下接口

package com.bestree.learn;

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

/**
 * 
 * @author bestree007
 *
 */
public class ProxyTest {
	public static void main(String[] args) {
		
		InvocationHandler handler = new InvocationHandlerImpl();
		
		Hello hello = (Hello) Proxy.newProxyInstance(Thread.currentThread()
				.getContextClassLoader(), new Class<?>[] { Hello.class },
				handler);
		hello.sayHello("MyGirl");
	}
}

运行一下这个main方法,结果打印出

invoke

4,代理的使用,可以在调用具体的被代理的逻辑之前做一些别的操作。以上从针对接口调用的角度来看Java动态代理的功能。使用Java的人强调针对接口编程,这是一个很好的倡议,针对接口编程,接口和接口实现包路径分开,也是osgi场景所提倡的。如果把接口作为服务来看,针对接口调用,调用者只看到接口,实际上调用者仅仅需要关注接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值