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中简单的反射的更多相关文章

  1. Java中的类反射

    一.反射的概念 : 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  2. JAVA中简单的for循环竟有这么多坑,你踩过吗

    JAVA中简单的for循环竟有这么多坑,你踩过吗 实际的业务项目开发中,大家应该对从给定的list中剔除不满足条件的元素这个操作不陌生吧? 很多同学可以立刻想出很多种实现的方式,但你想到的这些实现方式 ...

  3. 在JAVA中,关于反射机制的讨论

    一.什么是反射机制         简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,     那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...

  4. Java中为什么需要反射?反射要解决什么问题?

    一句话概括就是使用反射可以赋予jvm动态编译的能力,否则类的元数据信息只能用静态编译的方式实现,例如热加载,Tomcat的classloader等等都没法支持 Java中编译类型有两种: 静态编译:在 ...

  5. java中简单内存计算

    今天面试遇到一个问题,假设一个类中只声明一个int类型,那么这个对象多大,这里先写出解决方案,首先引入内存计算工具lucene-core, <dependency> <groupId ...

  6. Java中简单Http请求

    1. 概述 在这篇快速教程中,我们将使用Java内置类HttpUrlConnection来实现一个Http请求. 2. HttpUrlConnection HttpUrlConnection类允许我们 ...

  7. Java中类加载和反射技术实例

    我们知道一个对象在运行时有两种类型,一个是编译类型,一个是运行时类型.在程序运行时,往往是需要发现类和对象的真实的信息的.那么如何获的这种信息呢? 其一,如果我们在编译和运行时都知道类型的具体信息,这 ...

  8. java中 什么是反射?

    JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射 ...

  9. 关于Java中泛型、反射和注解的扫盲篇

    泛型 泛型概念   泛型是在JDK1.5之后引入的,旨在让我们写出更加通用化,更加灵活的代码.通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类 ...

随机推荐

  1. 自动载入Python虚拟环境

    自动载入Python虚拟环境 在安装jumpserver服务时发现可以使用autoenv来自动载入python虚拟环境,很好,非常好. $ cd /opt $ git clone https://gi ...

  2. Linux切换root超级用户问题

    具体方法如下: Ubuntu 1.使用终端工具的快捷键Ctrl + Alt +T 打开终端. 2.终端工具打开后如下图所示,操作就在这个窗口中进行 3.切换root用户的的方式一 执行命令 sudo ...

  3. 【2018】Python面试题【web框架】

    1.谈谈你对http协议的认识. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使 ...

  4. Android Application的目录结构

    目录结构: 1,java目录:保存java或kotlin源文件 2,res目录:保存Android项目的各种资源文件.比如layout子目录存放界面布局文件,values子目录存放各种XML格式的资源 ...

  5. win10的修改hosts文件

    1.找到hosts文件 2.右键hosts文件 -> 属性  -> 安全 ->  编辑 3.依次选中用户组用户组,完全控制打钩,点击应用,点击确定,完成. 一般情况下这样就能修改了 ...

  6. thymeleaf 模板使用 之 解决因HTML标签未闭合引起的错误

    一.修改thymeleaf属性配置 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring ...

  7. Spring boot data jpa 示例

    一.maven pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns ...

  8. ModbusRtu通信报文详解【二】

    这里接着上一篇内容对ModbusRtu的通信报文做个详细描述: [1]强制单个线圈 功能码:05H [2]预置单个寄存器 功能码:06H [3]强制多个线圈 功能码;0FH [4]预置多个寄存器 功能 ...

  9. 基于C#开发的扩展按钮控件

    最近在准备一套自定义控件开发的课程,下面将第一个做的按钮控件分享给大家. 其实这个控件属于自定义控件中的扩展控件,与组合控件和GDI+开发的控件不同,这个控件是继承原生的Button, 这个控件的目的 ...

  10. EasyUI_DataGrid数据操作

    1.html: <div style="width: 1100px;height: 350px ;overflow: scroll"> <table id=&qu ...