java反射机制动态代理初探

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java反射机制动态代理初探相关的知识,希望对你有一定的参考价值。

动态代理是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反射机制动态代理初探的主要内容,如果未能解决你的问题,请参考以下文章

Java反射机制动态代理

java反射机制与动态代理

java反射和动态代理有啥关系

简谈Java 反射机制,动态代理

简谈Java 反射机制,动态代理

深入了解Java动态代理与反射机制