Java代理简介


一、Java代理

代理模式为其他对象提供一种代理(中介)实现对这个对象的访问。大道理上讲代理是一种软件设计模式(场景),其目的是希望能做到代码重用。具体上讲,代理这种设计模式是通过不直接访问被代理对象的方式,而访问被代理对象的方法。

二、使用步骤

1.引入库

代码如下(示例):

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

2.使用的包和类

如下(示例):

Class
Proxy
ClassLoader
InvocationHandler
import java.lang.reflect

二,获取代理对象代码

package com.icss.biz;

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

public class GetProxy {
	private Object object;//被代理对象
	public Object getProxyObject(Object object) //获取代理对象的方法,执行invoke
	{
		this.object = object;
		return Proxy.newProxyInstance(object.getClass().getClassLoader(), 
				object.getClass().getInterfaces(),new InvocationHandler(){
			@Override
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				// TODO Auto-generated method stub
				Object o = null;
				if(method.isAnnotationPresent(AnnocationUserServer.class))
				{
					long start =System.currentTimeMillis();
				 o = method.invoke(object, args);
				long end = System.currentTimeMillis()-start;
				System.out.println("执行了"+end+"秒");
				return o;
				}
				else
				{
					o = method.invoke(object, args);
					return o;
				}	
			}} );
	}
}

四、 UserServer接口(AnnocationUserServer注解)

package com.icss.biz;

public interface UserServer {
	@AnnocationUserServer
	void login();
	
	void getListUser();
}

五、Main方法

package com.icss.ui;

import com.icss.biz.GetProxy;
import com.icss.biz.UserServer;
import com.icss.biz.UserServerImp;

public class TestServer {
	public static void main(String[] args) {
		UserServer user = (UserServer) new GetProxy().getProxyObject(new UserServerImp());
		user.login();
		user.getListUser();
	}
}

总结


  1. 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。是因为所有被代理执行的方法,都是通过在InvocationHandler中的invoke方法调用的,所以我们只要在invoke方法中统一处理,就可以对所有被代理的方法进行相同的操作了。
  2. 动态代理的过程中,我们并没有实际看到代理类,也没有很清晰地的看到代理类的具体样子,而且动态代理中被代理对象和代理对象InvocationHandler来完成的代理过程的代理对象执行的方法都会通过InvocationHandler中的invoke方法来执行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值