• 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();
    	}
    

      

  • 相关阅读:
    php无刷新上传图片和文件
    wamp(win1064位家庭版+apache2.4.20+php5.5.37+mysql5.5.50)环境搭建
    linux下常见解压缩命令
    nginx虚拟主机配置小结
    Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持
    iframe 高度自适应/以及在ie8中空白问题
    小程序-调用公共js对象方法/ app.js
    小程序-tabbar相关样式设置
    微信小程序连接无法跳转/ can not navigate to tabBar page错误
    微信小程序-tabBar无法显示问题解析
  • 原文地址:https://www.cnblogs.com/smallbrokenchildwen/p/7287382.html
Copyright © 2020-2023  润新知