学习内容:

(1)获取构造函数
这里不贴Person类了,不然代码太多太乱了,只给出一些常用API

// 创建字节码对象
Class<?> aClass = Class.forName("com.yy.Person");
// 1、获取公共无参的构造方法
Constructor<?> constructor = aClass.getConstructor();
// 2、获取公共有参的构造方法
Constructor<?> constructor2 = aClass.getConstructor(String.class, int.class)
// 3、获取私有的无参构造方法
Constructor<?> priConstructor = bClass.getDeclaredConstructor();
// 4、获取私有的有参构造方法
Constructor<?> priConstructor1 = bClass.getDeclaredConstructor(String.class, int.class);
// 5、通过公共无参构造创建对象
Object o = constructor.newInstance();
// 6、通过私有构造器创建实例对象,私有构造器调用必须让Java检测机制忽略访问权限(暴力反射)
priConstructor1.setAccessible(true);
Object obj = priConstructor1.newInstance("熊大", 15);

(2)获取方法
Person中的add、del、set、query都是我自定义的方法,具体类型看注释

// 创建字节码对象
Class<?> aClass = Class.forName("com.yy.Person");
// 1、通过字节码对象获取公共无参方法
Method add = aClass.getMethod("add");
// 2、通过字节码对象获取私有无参方法
Method del = aClass.getDeclaredMethod("del");
// 3、通过字节码对象获取公共有参方法
Method set = aClass.getMethod("set", String.class);
// 4、通过字节码对象获取私有有参方法
Method query = aClass.getDeclaredMethod("query", String.class, int.class);
// 5、调用公共有参方法,o是字节码对象调用构造方法创建出来的对象
Object obj = set.invoke(o, "小肥羊");
// 6、调用私有方法,o是字节码对象调用构造方法创建出来的对象,私有方法调用必须让Java检测机制忽略访问权限(暴力反射)
query.setAccessible(true);
Object obj2 = query.invoke(o, "大肥羊", 11);

(3)内省机制获取JavaBean字段

public void testSetIntrospect() throws ClassNotFoundException, IllegalAccessException, InstantiationException, IntrospectionException, InvocationTargetException {
// 1、创建字节码对象
Class<?> aClass = Class.forName("com.yy.Person");
// 2、获取构造器并通过构造器创建实例
Object o = aClass.newInstance();
// 3、通过 Introspector 类把bean信息封装到 beanInfo 中
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
// 4、通过 getPropertyDescriptors() 获取一个属性数组
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
// 5、遍历属性数组,并通过比较属性获取该属性的Set方法,然后利用该Set方法给对象设置值
for(PropertyDescriptor pd : propertyDescriptors) {
// 获取属性名
String name = pd.getName();
System.out.println("name = " + name);
// 获取Get方法
Method getMethod = pd.getReadMethod();
// 获取Set方法
Method setMethod = pd.getWriteMethod();
// 当方法名为 name 时进入(Get、Set都能进入)
if(name.equals("name")) {
// 执行 name 的 Set 方法
setMethod.invoke(o, "小肥羊");
System.out.println("o = " + o);
}
// 执行Get方法
Object invoke = getMethod.invoke(o);
System.out.println("invoke = " + invoke);
}
}

总结:

以上就是反射常用的API以及内省机制的代码了,反射基础去看我的上一篇博客:博客地址

反射常用API以及内省机制(代码)的更多相关文章

  1. 【代码笔记】Java——远程监控、反射、代理、内省机制

    远程控制的基本原理 远程控制(RemoteControl)拥有控制端和被控端双方. 控制方通过请求,取得对远端的操作,实现远端的事件回放功能,同时,应该看得到远端桌面的画面.而被控方必须在建立Serv ...

  2. 反射常用API

    反射所有功能都是通过class API来实现的 class常用API有: 1.class.GETINTERFACES():获得这个类实现的接口. 2.class.getMethods() Method ...

  3. Java反射常用API汇总

    “JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性” 一.类对象的获取 1.通过对象获取 Object obj = ne ...

  4. kafka中常用API的简单JAVA代码

    通过之前<kafka分布式消息队列介绍以及集群安装>的介绍,对kafka有了初步的了解.本文主要讲述java代码中常用的操作. 准备:增加kafka依赖 <dependency> ...

  5. jackson学习之三:常用API操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. (反射+内省机制的运用)简单模拟spring IoC容器的操作

    简单模拟spring IoC容器的操作[管理对象的创建.管理对象的依赖关系,例如属性设置] 实体类Hello package com.shan.hello; public class Hello { ...

  7. 反射的常用API

    反射的常用API 加载程序集 Assembly assembly = Assembly.Load("程序集名称"); // 从前目录加载程序集,提供程序集名称,无后缀 Assemb ...

  8. java内省机制及PropertyUtils使用方法

    背景 一般情况下,在Java中你可以通过get方法轻松获取beans中的属性值.但是,当你事先不知道beans的类型或者将要访问或修改的属性名时,该怎么办?Java语言中提供了一些像java.bean ...

  9. Java内省机制

    转自: https://blog.csdn.net/hahalzb/article/details/5972421 1.java内省机制其实通俗的理解为,对自身的进行一个扫描,这个扫描的对象就是我们普 ...

随机推荐

  1. 函数式组件中实现Antd打开Modal后其Input框自动聚焦(focus)到文字的最后

    目前React使用函数式组件已经成为趋势, 如何把React函数式组件用好, 提高性能, 从而实现业务需求也成为了一种能力的体现......咳咳咳, 进入正题: 现实场景需求 我想实现这一个需求, 父 ...

  2. insert一个表的数据到另外一个表

    insert into a(real_name,is_main,mobile,password,property_id,create_time) select linkman as real_name ...

  3. SSH 免密码认证登陆

    检查是否已安装ssh rpm -qa |grep ssh 如未安装可以重新安装 yum install -y openssl openssh-server 修改配置 vim  /etc/ssh/ssh ...

  4. ## [湖南省赛2019]Findme ###

    [湖南省赛2019]Findme 1.题目概述 2.解题过程 010打开这几张图片 先简单分析一下这几张图片 简单分析 1.png 从外观上,1.png明显高度太低,需要更改 2.png 2.png末 ...

  5. 微信小程序刚注册快速达到1000uv

    一.什么是微信小程序uv ​ UV:是累计独立访问,1个微信号就是一个uv,多次访问不算 ​ 大家想提升微信小程序uv都是为了开通流量主 二.流量主开通标准 ​ 达到1000uv就可以开通:严重违纪不 ...

  6. WPF 文本描边+外发光效果实现

    解决思路: (1)描边效果可以将文本字符串用GDI+生成Bitmap,然后转成BitmapImage,再用WPF的Image控件显示. (2)外发光效果用WPF自带的Effect实现 代码: 1 us ...

  7. java垃圾处理机制

    java文件通过编译器(javac命令)生成class文件(字节码文件),其通过java命令启动虚拟机将字节码文件转换成平台能够理解的方式运行. 类存在于源文件里面,方法存在于类中,语句存在与方法中. ...

  8. Linux指令入门-系统管理(云小宝码上送祝福,免费抽iphone13任务)

    码上送祝福,带云小宝回家 做任务免费抽iphone13,还可得阿里云新春限量手办 日期:2021.12.27-2022.1.16 云小宝地址:https://developer.aliyun.com/ ...

  9. Flask 之路由系统

    Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST" ...

  10. python监控cpu 内存实现邮件微信报警

    # qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_36374896 import psutil, time,smtplib,socket import ...