首页 > 编程语言 > 详细

java反射机制(4)动态代理初探

时间:2017-08-04 23:31:21      阅读:206      评论:0      收藏:0      [点我收藏+]

动态代理是javase中重要的一环,比如说spring框架的aop基本上都是用动态代理实现的。

动态代理也能帮助程序员减少工作量,减少代码的冗余。

但是java本身的动态代理必须是实现了接口的类才能运用代理,这是一个缺点。

接口:

 

public interface HireHouse {
	public void hire();
}

接口实现类:

public class HireHouseImpl implements HireHouse {

	@Override
	public void hire() {
		System.out.println("租房");
	}

}

动态代理实现(反射):

动态代理必须实现InvocationHandler接口,然后重写invoke方法来处理其它事物。

public class DynamicProxy implements InvocationHandler {
	
	private Object obj;
	
	

	public DynamicProxy(Object obj) {
		
		this.obj = obj;
	}


	/**
	 * 动态代理
	 * 优化代码
	 * 能将功能相近的一些类的方法 集中到一个动态代理类中进行处理,减少代码冗余。
	 */

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("前置工作");
		Object invoke=method.invoke(obj, args);
		System.out.println("后置工作");
		return invoke;
	}

}

动态代理类的实现:

/**
	 * 测试: 动态代理
	 * 1.声明实体对象
	 * 2.通过动态代理的方式代理被代理者的所有方法
	 * 参数  1.获取实体的类加载器,2.获取实体类的所有接口,3.声明代理类并传入需要代理的实体类。
	 */
	@Test
	public void testDynamicProxy() throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		HireHouseImpl hhi=new HireHouseImpl();
		HireHouse hireHouse=(HireHouse) Proxy.newProxyInstance(hhi.getClass().getClassLoader(), hhi.getClass().getInterfaces(), new DynamicProxy(hhi));
		hireHouse.hire();
	}

  

 

java反射机制(4)动态代理初探

原文:http://www.cnblogs.com/smallbrokenchildwen/p/7287382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!