java中简单的反射
1、为什么会用到反射机制?
最近需要写定时服务,如果一个一个去写定时服务的话,后期维护是很烦人的,通过反射机制,我们就可以将定时服务的信息通过数据配置来实现,这样我们后期就可以将整个模块交给运维人员去管理,这样就大大的减少了我们的运维时间,可以更多的时间和精力投入到新项目或者学习中。原来在用.net的时候已经实现了这部分的功能,现在公司大方向转到java,我们也只能跟着转了。
因为接到了这个任务后面还是要做类似.net的运维功能,所以趁着空闲了解了一下java中的反射机制:
下面写一个简单的例子:
首先,定义一个父类(因为是测试代码,命名之类的都比较随意)
public interface test {
public abstract void test1();
}
其次,定义两个子类(这边是测试所以就写了两个,实际开发中可以自行添加)
public class test1 implements test {
@Override
public void test1() {
System.out.println("测试1");
}
}
public class test2 implements test {
@Override
public void test1() {
System.out.println("测试2");
}
}
做完上面两步,最后就是通过反射机制来实现了:
public static void main(String[] args){
try {
//list可以将这部分配置在数据库中
List<String>list=new ArrayList<>();
list.add("service.impl.test2");
list.add("service.impl.test1");
for (String className:list) {
test t1=(test)Class.forName(className).newInstance();//test对应的父类
t1.test1();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
注:list部分如果是做定时服务的话,可以将每个方法对应的运行时间配置在数据库这样我们就可以通过数据库配置灵活的控制每个服务的运行时间,就不需要每次时间改变都要去手动修改代码。
2、反射之获取实体属性
@Data
public class Company {
private Integer CompanyID ;
private String CompanyMainName;
private String UsedName;
private Integer OfficerID;
private String OfficerName ;
private Integer Area;
private String CountrywideName ;
private String Code ;
private String RegisterAddress;
private String RegisterPostCode;
private String DetailAddress;
private String DetailRegisterPostCode;
private String BussinessCharter;
private String CorporationNumber;
private String SocialCreditCode;
private Integer Principal;
private Integer MonetaryUnitID;
private String MonetaryUnitName ;
private Integer EconomyTypeID;
private String EconomyTypeName;
private Date BussinessDateStart;
private String Fax;
private String Phone;
private String LinkManMobile;
private String EMail ;
private String WebSite;
private String LinkMan;
private String LinkManTelephone;
private Integer BusinessSystemTypeID;
private Integer BusinessSystemTypeName;
private Integer Guid;
}
public static void main(String[] args){
try {
Field []field = model.Company.class.getDeclaredFields();
String ss=Arrays.toString(model.Company.class.getClasses());
for (Field info:field) {
System.out.println(info.getName());
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
3、通过反射获取类中的方法
public static void main(String[] args){
try {
//list可以将这部分配置在数据库中
List<String>list=new ArrayList<>();
list.add("service.impl.test2");
list.add("service.impl.test1");
for (String className:list) {
test t1=(test)Class.forName(className).newInstance();//test对应的父类
Class cl = t1.getClass();
Method[] methods = cl.getDeclaredMethods();
for (Method m:methods) {
System.out.println(m);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
java中简单的反射的更多相关文章
- Java中的类反射
一.反射的概念 : 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- JAVA中简单的for循环竟有这么多坑,你踩过吗
JAVA中简单的for循环竟有这么多坑,你踩过吗 实际的业务项目开发中,大家应该对从给定的list中剔除不满足条件的元素这个操作不陌生吧? 很多同学可以立刻想出很多种实现的方式,但你想到的这些实现方式 ...
- 在JAVA中,关于反射机制的讨论
一.什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...
- Java中为什么需要反射?反射要解决什么问题?
一句话概括就是使用反射可以赋予jvm动态编译的能力,否则类的元数据信息只能用静态编译的方式实现,例如热加载,Tomcat的classloader等等都没法支持 Java中编译类型有两种: 静态编译:在 ...
- java中简单内存计算
今天面试遇到一个问题,假设一个类中只声明一个int类型,那么这个对象多大,这里先写出解决方案,首先引入内存计算工具lucene-core, <dependency> <groupId ...
- Java中简单Http请求
1. 概述 在这篇快速教程中,我们将使用Java内置类HttpUrlConnection来实现一个Http请求. 2. HttpUrlConnection HttpUrlConnection类允许我们 ...
- Java中类加载和反射技术实例
我们知道一个对象在运行时有两种类型,一个是编译类型,一个是运行时类型.在程序运行时,往往是需要发现类和对象的真实的信息的.那么如何获的这种信息呢? 其一,如果我们在编译和运行时都知道类型的具体信息,这 ...
- java中 什么是反射?
JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射 ...
- 关于Java中泛型、反射和注解的扫盲篇
泛型 泛型概念 泛型是在JDK1.5之后引入的,旨在让我们写出更加通用化,更加灵活的代码.通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类 ...
随机推荐
- JAVA汽车4S店管理系统
JAVA汽车4S店管理系统源码(前台+后台)分为这5个大模块 系统设置 整车销售辅助销售汽修管理 汽修统计1.经理管理(增加 和删除功能) 表设计经理编号经理名年龄性别2.业务员管理(增删改查) ...
- MySQL-存储引擎-创建表-字段数据类型-严格模式-字段约束-键-02
目录 扩展点 查看服务端字符.IP.端口配置 取消本次错误输入 例外情况 database 数据库操作 table 数据表操作 查看MySQL存储引擎 常见几个存储引擎 InnoDB MyISAM M ...
- 移动站Web开发图片自适应两种常见情况解决方案
本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...
- nofollow标签浪费了多少站长做外链的时间
对于rel=“external nofollow”和rel=“nofollow”,这两句代码,使用起来效果基本是一致的,只是前者较后者更为规范一点,两者翻译过来的意思就是:rel=“external ...
- vbs 简单文件操作
Dim fso, MyFile, fldSet fso = CreateObject("Scripting.FileSystemObject")Set fld = fso.crea ...
- JS基础_运算符的优先级
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JS基础_赋值运算符
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- SpringBoot返回页面乱码解决
SpringBoot,在做全局异常处理的时候,返回中文字符串时,出现乱码情况,网上查阅资料之后,解决方式如下所示,自定义WebConfiguration继承WebMvcConfigurationSup ...
- vue-element-admin 多层路由问题
在二级页面上添加<router-view> 关于页面打包后三级路由无法访问问题 需要将 存放router-view 的页面单独存放一个文件夹 router.js 写法
- OGG学习笔记03
OGG学习笔记03-单向复制简单故障处理 环境:参考:OGG学习笔记02-单向复制配置实例实验目的:了解OGG简单故障的基本处理思路. 1. 故障现象故障现象:启动OGG源端的extract进程,da ...