Cheug's Blog

当前位置:网站首页 / JAVA / 正文

动态代理设计模式

2019-04-24 / JAVA / 995 次围观 / 0 次吐槽 /

动态代理概述

            1.代理:本来应该自己做的事情,请了别人来做,被请的人就是代理对象。

            举例:春节回家买票让人代买  

             

            2.Javajava.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口

            3.通过使用这个类和接口就可以生成动态代理对象。

             

            4.JDK提供的代理只能针对接口做代理。我们有更强大的代理cglib

            5.Proxy 通过 newProxyInstance(loader,interfaces,h)创建代理对象

            5.InvocationHandlerinvoke(proxy,method, args)方法会拦截方法的调用

案例代码

public class D1 {

	public static void main(String[] args) {
		//创建对象
		UserServerIMPI usimpi = new UserServerIMPI();
		//创建代理对象
		UserServer proxy =(UserServer) Proxy.newProxyInstance(usimpi.getClass().getClassLoader(),
								usimpi.getClass().getInterfaces(),
								new InvocationHandler() {
			
			@Override
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				System.out.println("方法调用前");
				//拦截了方法
				Object returnObj = method.invoke(usimpi, args);
				System.out.println("方法调用后");
				return returnObj;
			}
		});
		proxy.login();
		proxy.delUser();
	}

}
interface UserServer{
	public abstract void login();
	public abstract void delUser();
}
class UserServerIMPI implements UserServer{

	@Override
	public void login() {
		System.out.println("用户登陆");
	}

	@Override
	public void delUser() {
		System.out.println("删除用户");
	}
}


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.