reflect
来源:互联网 发布:数据质量控制体系 编辑:程序博客网 时间:2024/05/22 16:24
反射
什么是反射
反射是Java提供的动态执行机制, 可以动态加载类, 动态创建对象, 动态访问属性, 动态调用方法..
静态执行: Java代码经过编译以后就确定的执行次序, 称为静态执行次序
Foo foo = new Foo();foo.test();
动态执行: 在运行期间才确定创建那个类的对象, 执行那个方法!
Java 反射API可以实现动态执行!
案例: 执行某个类中全部的以test为开头的方法. (必须使用使用反射实现)
反射:
- 反射是Java提供的API, 接受API的提供的功能!
- 是Java底层的执行机制.
反射功能
动态加载类
Class cls = Class.forName(类名)
作用: 将类名对应的类加载到方法区, 如果类名错误则抛出异常.
动态创建对象
Object obj = cls.newInstance();
特点:
- 动态创建对象
- 可以创建任何对象
- cls对应的类必须有无参数构造器!!!
- 如果没有无参数构造器则抛出异常!
- 反射API利用Constructer API支持有参数构造器, 略…
反射可以查询类中的方法
可以返回类中声明的全部方法信息
Method[] methods = cls.getDeclaredMethods(); for(Method m:methods){ System.out.println(m);//输出方法信息}Declared 声明的Method 方法
动态执行方法
执行方法:
- 必须有对象
- 找到对象对应的类型方法信息
- 方法信息在类上查找
案例:
Method m = cls.getDeclaredMethod(方法名);//在类信息上查找一个方法信息//m 代表 cls类上的一个方法信息Object obj=cls.newInstance();//动态创建对象//动态调用(invoke)方法Object val = m.invoke(obj);
反射用途
- Eclipse 的快捷菜单使用了反射, 利用反射发现了类的属性和方法
- Spring 利用了反射
- 动态加载类
- 动态创建Bean
- 动态注入属性, 包括私有属性注入
- 动态解析注解
- MyBatis 利用了反射
- 查询时候, 动态了将查询结果利于反射注入到Bean返回
- JUnit 使用了反射
- 注解的解析使用了反射
- Servlet调用使用了反射
阅读全文
0 0
- reflect
- reflect
- Reflect
- Reflect
- Reflect
- Reflect
- Reflect
- Reflect
- Reflect
- reflect
- Reflect
- reflect
- reflect
- Annotation + reflect
- java reflect
- reflect intro
- 反射reflect
- reflect学习
- 顺序表的实现(C语言)
- gradle + idea 构建 可运行的jar包
- linux服务器端搭建memcache缓存服务
- 实习笔记
- serialVersionUID
- reflect
- 八.Scrapy 学习下Spider中间件Spider Middlewares
- 1293: 倒三角形
- AndroidStudio Memory Monitor使用介绍
- 大数问题
- 开源Ethercat主站 SOEM和IgH的比较
- ubuntu 下的文件校验(md5、sha256)
- Windows 7 登录共享提示“登录失败 禁用当前的账户”解决方案
- Http和Https区别详解