1,反射是依赖于Class对象,然后根据Class对象,去操作该类的资源的。Class对象是发射的基石!

问题1:人这类事物用什么表示?汽车这类事物用什么表示》计算机文件用什么表示?有如此多的事物该用什么表示?

答案:Person类,Car类,File类,这么多的类也是一类事物,这类事物用Class表示。

问题2:Person类的对象,我们知道代表一个具体的人。那么Class类的对象,又代表什么?

一个类,在硬盘上表示一个.class文件,JVM启动的时候,把文件加载到内存上,占用一片空间,称为一个字节码文件对象。这个对象就是Class的一个实例。不同的类,有自己的字节码文件对象。这些对象都是Class对象的实例。

问题3:如何获取一个Class对象呢?

2,获取Class的三种方式

获取方式有三种:

方式1:类名.class

方式2:对象.class

方式3:static Class forName(String className)

三种方式用哪种比较好呢?

如果是自己玩,用前两种

如果是开发,用第三种

三种方式的区别:第三种方式比前两种方式的优势在于:只要类的全名字符串

,就可以获取字节码,扩展性好。而前两种:必须有类或对象才能拿到字节码

3,反射的概念

反射就是通过一个类的Class对象把类中的各种成员映射成对应的Java类。一个类中的:成员变量、构造函数

、成员方法都有对应的Java类:Field、Constructor、Method;就比如:一个汽车是一个类,汽车中的发动机、l轮胎等等都可以是一个个的类。一个类的Class对象可以获取其所有成员的信息,比如一个方法的名称、修饰符、参数类型、返回值等等信息封装成一个描述方法的类中。

4,动态代理

4.1概念

动态:我们以前写一个代码,写好后,编译,编译后成class文件。这叫静态。

在程序的运行过程中,不用写代码,直接在内存中生成一份字节码文件。这叫动态。

代理:让别人帮我们做事情。

在刚才的例子中,我们应该专注与Math中相关的:getSum 、 getJC啊这些方法。测试时间这些东西我不应该做,也不想做。我想让别人替我们做。

在这个过程中,我们不能去修改自己原来的代码。而是动态的生成一个新的类,这个类拥有与MathImpl相同的功能:getSum 、 getJC这些功能。而且要在这些功能的前后,加上计算时间的代码。这个类就叫做动态代理类。

这个动态生成的类叫做动态代理谁,他代理了谁?MathImpl

4.2动态生成一个类

动态生成类:static Class getProxyClass(ClassLoader loader,Class… interfaces)动态生成一个类

参数1:ClassLoader一个类加载器,随意

参数2:可变参数,是要代理的类所实现的接口。通过接口,可以知道要代理的类中有哪些方法

动态代理的原理:我们访问的是代理对象,代理对象去访问了InvocationHandler中的invoke方法。invoke方法是我们写的。我们可以在里面调用代理对象的对应方法。并且可以在调用的前后加自己想要的代码

4.3动态生成一个对象

获取代理对象

static Object newProxyInstance(ClassLoader loader,Class[ ]  interfaces,InvocationHandler h)

Java基础之反射和动态代理的更多相关文章

  1. java 27 - 9 反射之 动态代理的概述和实现

    代理:本来应该自己做的事情,却请了别人来做,被请的人就是代理对象. 举例:春季回家买票让人代买 动态代理: 在程序运行过程中产生的这个对象 而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以 ...

  2. Java高级特性—反射和动态代理

    1).反射 通过反射的方式可以获取class对象中的属性.方法.构造函数等,一下是实例: 2).动态代理 使用场景: 在之前的代码调用阶段,我们用action调用service的方法实现业务即可. 由 ...

  3. Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)

    1.   Annotation注解 1.1.  Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annota ...

  4. java 27 - 10 反射之 动态代理的代码实现

    为什么要写动态代理类? 例子: 如果现在想做个登陆注册的功能.用户可以执行登陆.注册.添加.删除这些功能. 但是,有些功能是要有一定权限才可以执行的. 而现在已经有了个用户类的接口和该类的实现类了,但 ...

  5. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

    反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...

  6. 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】

    一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...

  7. Java反射和动态代理

    Java反射 反射机制 RTTI 编译器在编译时打开和检查*.class文件 反射机制 运行时打开和检查*.class文件 Java反射常见的方法 java反射的应用 setAccessible(bo ...

  8. Java 反射 设计模式 动态代理机制详解 [ 转载 ]

    Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...

  9. Java反射机制动态代理

    1.什么事反射机制动态代理 在一段代码的前后动态执行其他操作,比如有一个方法是往数据库添加一个记录,我们可以通过动态代理,在操作数据库方法的前和后添加代码执行打开数据库连接和关闭数据库连接. 2.演示 ...

随机推荐

  1. java画图之曲线拖动

    目标:在窗体上按下鼠标按键.然后拖动鼠标,在按下和拖动之间绘制曲线 事件机制 事件源对象:窗体 事件监听方法:addMouseListener(MouseListener l);addMouseMot ...

  2. 1125mysqbinlog日志

    -- 认真分析mysqbinlog的日志,其中前半部分使用的binlog_format='STATEMENT',后半部分使用binlog_format='ROW';-- 所谓二进制文件,就是可以直接执 ...

  3. 关于jsp页面将表单填入数据库出现中文乱码绝对解决方案

    在所有jsp页面中添加两句话1.<%@ page language="java" contentType="text/html; charset=utf-8&quo ...

  4. u盘安装系统教程详解

    一.准备阶段 提前准备一个至少1G或以上的u盘,方便好用. 1.制作u盘启动工具 (1)工具下载,推荐IT天空的优启通 下载地址:https://www.itiankong.net/thread-37 ...

  5. [Think In Java]基础拾遗2 - 多态、反射、异常、字符串

    目录 第八章 多态第十四章 类型信息第十二章 通过异常处理错误第十三章 字符串 第八章 多态 1. 前期绑定 & 后期绑定 绑定是指将方法调用同一个方法主体关联起来的这么一个过程.如果在程序执 ...

  6. 使用IntelliJ IDEA 配置Maven(入门)

    1. 下载Maven 官方地址:http://maven.apache.org/download.cgi 解压并新建一个本地仓库文件夹 2.配置本地仓库路径   3.配置maven环境变量      ...

  7. 初识Jsoup之解析HTML

    按照国际惯例,我首先应该介绍下Jsoup是个什么东西,然后在介绍下具体用法,然后在来个demo演示,其实我也是这么想的,小编今天花了一天的时间从学习—>解析页面,总算是成果圆满了吧,啊哈,但是, ...

  8. Agent理解

    简单来说,Agent是一个交互性的技术. 比如我们在网上购物时,主体是人,即请求的发出者,我们在搜索商品时,向系统发出请求,系统会给我们一个返回结果,然而我们发现很多情况下,我们会在商品栏目中发现我们 ...

  9. java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException错误的解决

    java.lang.NoClassDefFoundError 是运行时jvm找不到对应类.这种情况是少包的导致的.根据提示语添加对应的jar包就可以. 感叹一下:maven真是一个伟大的东西,在包的依 ...

  10. mysql备份脚本,每天执行一次全量备份,三次增量备份

    线上一个小业务的mysql备份 全量备份 #!/bin/bash #crete by hexm at -- #scripte name : full_backup.sh #descriptioni : ...