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分词工具hanlp介绍
前几天(6月28日),在第23届中国国际软件博览会上,hanlp这款自然语言处理工具荣获了“2019年第二十三届中国国际软件博览会优秀产品”. HanLP是由一系列模型预算法组成的工具包,结合深度神经 ...
- Hadoop集群搭建-03编译安装hadoop
Hadoop集群搭建-05安装配置YARN Hadoop集群搭建-04安装配置HDFS Hadoop集群搭建-03编译安装hadoop Hadoop集群搭建-02安装配置Zookeeper Hado ...
- Mysql 三大特性详解
Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的.所以我们通过ps查找mysqld进程是只有一个. 体系架构 InnoDB存储引擎的架构如下 ...
- MySQL安装及初级增删改查一
学习MYsql 是参照这个维C果糖的总结,学习目录网址:https://blog.csdn.net/qq_35246620/article/details/70823903,谢谢大神的无私分享. 一. ...
- 怎样理解DOM
一句话总结: DOM 是一个 js 对象. 他可以赋予 js 控制 html 文档的能力. 全称: Document Object Model. DOM 的最小组成单位是: 节点 , 节点有7种类型 ...
- EXSI宿主机更换硬盘后虚机启动有问题
环境说明: 最近EXSI主机磁盘坏掉了,重新换掉磁盘以后启动虚机有问题. 虚机的报错信息如下: 找了下修复方法,操作过程为: 尝试修复 (以下是百度的方法) ls -l /dev/mapper mkd ...
- java——ArrayList中remove()方法疑问总结
其实remove方法和contains方法大同小异,它的原理和contains方法相同https://www.cnblogs.com/lyxcode/p/9453213.html在这篇博客里面有详细说 ...
- JS基础_while循环
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 解决 /etc/init.d/php-fpm no such file or directory等相关问题
vi /etc/init.d/php-fpm #! /bin/sh # Comments to support chkconfig on CentOS # chkconfig: 2345 65 37 ...
- javascript 元编程之-代码修改代码
javascript 元编程之-代码修改代码 引言 重构代码是个体力活,特别是在确定重构方案后,剩下就是按方案调整代码,然后进行测试. 如何有好又快的调整到位代码,这是件不容易的事. 简单的代码,可以 ...