Java学习笔记--JDK动态代理】的更多相关文章

1.JDK动态代理     JDK1.3之后,Java提供了动态代理的技术,允许开发者在运行期创建接口的代理实例.JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler.其中InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标的代码,动态将横切逻辑和业务逻辑编织在一起.而Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象.     通…
CGLib动态代理 使用JDK创建代理有一个限制,即它只能为接口创建代理实例,这一点可以从Proxy的接口方法newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler handler)中看得很清楚:第二个入参interfaces就是需要代理实现的接口列表. CGLib采用底层的字节码技术,可以为一个类创建子类,在子类总采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑. 简单使用 定义一个需要代理的类…
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系.例如日志功能.日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无…
所谓代理,其实就是相当于一个中间人,当客户端需要服务端的服务时,不是客户直接去找服务,而是客户先去找代理,告诉代理需要什么服务,然后代理再去服务端找服务,最后将结果返回给客户. 在日常生活中,就拿买火车票来比喻.以前买票,都是需要到火车站去买的,但是有些人距离火车站太远不方便去,来来回回总是很麻烦.于是铁道部就在城市的各个地方增设一个火车票代售点,在这个代售点就可以买票而不用去火车站了.这里,这个代售点就相当于一个代理,可以提供火车站所提供的服务. 下面说说JAVA中的代理 代理的实现又分为静态…
动态代理核心源码实现public Object getProxy() { //jdk 动态代理的使用方式 return Proxy.newProxyInstance( this.getClass().getClassLoader(), target.getClass().getInterfaces(), this//InvocationHandler接口的自定义实现类 );}12345678使用JDK动态代理,首先要自定义InvocationHandler接口的实现类,书写代理类的控制逻辑. 示…
InvocationHandler接口 public interface InvocationHandler{ public Object invoke(Object proxy,Method method,Object[] args)throws Throwable } 参数说明: Object proxy:被代理的对象 Method method:要调用的方法 Object args[]:方法调用时所需要的参数 Proxy类 Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动…
Proxy提供用于创建动态代理类和代理对象的静态方法,它也是所有动态代理类的父类.如果我们在程序中为一个或多个接口动态地生成实现类,就可以使用Proxy来创建动态代理类:如果需要为一个或多个接口动态的创建实例,也可以使用Proxy来创建动态代理实例. Proxy提供了如下两个方法来创建动态代理类和动态代理类: (1).static Class<?>  getProxyClass(ClassLoader loader,Class<?> ...interfaces) : 创建一个动态代…
一.动态编译 简单的说就是在运行一个java程序的过程中,可以通过一些API来编译其他的Java文件. 下面主要说动态编译的实现: 1.获取java编译编译器 2.运行编译器(须指定编译文件) 获取编译器通过JavaCompiler ToolProvider.getSystemJavaCompiler()://返回该平台提供的JAVA语言编译器 运行调用int run(InputStream in,OutputStream out,OutputStream err,String... argum…
基于JDK的动态代理例子如下 接口 Subject public interface Subject { public abstract void request(); } 实现类RealSubject public class RealSubject implements Subject { @Override public void request() { System.out.println("from realsubjct"); } } 代理类 public class Dyn…
1.JDK的下载和安装 jdk(java development kit)是java提供给我们的一套java开发工具,它必运行在JVM(java虚拟机)上,java语言的跨平台性就是利用java运行在JVM的不同平台版本实现的.比如JVM有linux版,windows版和mac版,我们写好的java程序不用修改就能运行在这三个不同的操作系统上,就是依靠这些平台对应的JVM. JDK的下载 java目前的最新版本是JDK-8u60,点击此链接下载java8.0,上面和下面的区别在于下面有api的使…