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


    动态代理是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();
    	}
    

      

  • 相关阅读:
    转: CEF嵌入到单文档mfc
    浅谈C++多态性
    C++面试整理1
    面试汇总
    【转】一些经典的笔试题
    C# 委托
    搭建Nuget
    thinkphp框架之模型(数据库查询)
    利用csc.exe 手动编译C#程序
    css
  • 原文地址:https://www.cnblogs.com/smallbrokenchildwen/p/7287382.html
Copyright © 2020-2023  润新知