java--设计模式之动态代理1

  • 动态代理模式:实现框架底层的核心
    1)构建一个对象,构建InvocationHandler对象
    2)构建动态代理对象(利用被代理对象和InvocationHandler对象)
public class DynamicProxyDemo {
	public static void main(String[] args) {
		//1.构建被代理对象
		CalFabImpl calFab = new CalFabImpl();
		//2.构造InvocationHandLer对象
		CalFabInvocationHandler invocationHandler = new CalFabInvocationHandler(calFab);
		//3.构造动态代理对象
		//arg0:传被代理对象的类加载器对象
		//arg1:传被代理对象的所实现的接口
		//arg3:传InvocationHandler对象
		ICalFab dynameicProxy = (ICalFab)Proxy.newProxyInstance(calFab.getClass().getClassLoader(),
				calFab.getClass().getInterfaces(),
				invocationHandler);
		//4.利用代理对象调用业务方法
		System.out.println(dynameicProxy.calFabByLoop(40));
		System.out.println(dynameicProxy.calFabByRecursion(40));
		
	}

}

编写InvocationHandler类,要实现InvocationHandler接口

class CalFabInvocationHandler implements InvocationHandler{
	
	private Object target; //被代理对象
    public CalFabInvocationHandler(Object targer) {
		this.target = target;
    }
    /*
     * proxy:代理对象,这个对象是在程序运行的过程中动态创建出来的。
     * method:调用的方法
     * args:方法的参数
     */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		//1.业务代码之前增加代码
		long start = System.currentTimeMillis();
		//2.业务代码
		//调用被代理类的业务方法
		Object result = method.invoke(target,args);  
		//3.业务代码之后切入代码
		long end = System.currentTimeMillis();
		System.out.println((end-start) + "ms");
		return result;
	}
	
}
发布了26 篇原创文章 · 获赞 9 · 访问量 290

猜你喜欢

转载自blog.csdn.net/weixin_45430616/article/details/102795268