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之后引入的,旨在让我们写出更加通用化,更加灵活的代码.通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类 ...
随机推荐
- [转帖]PKI技术原理(收集 整理 归纳)
PKI技术原理(收集 整理 归纳) https://blog.51cto.com/3layer/20430 总结归纳的 灰常好.. 7layer关注8人评论39427人阅读2007-03-14 11: ...
- 【LOJ】#3083. 「GXOI / GZOI2019」与或和
LOJ#3083. 「GXOI / GZOI2019」与或和 显然是先拆位,AND的答案是所有数字为1的子矩阵的个数 OR是所有的子矩阵个数减去所有数字为0的子矩阵的个数 子矩阵怎么求可以记录每个位置 ...
- php 正则替换特殊字符 和检测是否是中文
如果是只想输入中文的话,就这么写,要注意是分gb2312和utf-8的哦: gb2312:if(!preg_match("/^[".chr(0xa1)."-". ...
- easyswoole报错:failed: Error during WebSocket handshake: Unexpected response code: 200
WebSocket connection to 'ws://www.xxxx.com/xxx/xx' failed: Error during WebSocket handshake: Unexpec ...
- django form组件 cookies,session
django form组件 渲染标签 就是组件里面的字段在前端展示叫做渲染标签 校验数据 用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...
- python3.6以后的新写法
声明redis_store为StrictRedis 类型,值为None,用处:在别处调用时,如果redis_store仍为None,不会有提示(自动补全的提示),如果想要自动补全的提示则写成这样,函数 ...
- thymeleaf 模板使用 之 前台界面获取后台属性值
使用Thymeleaf模板时,如果需要在js中获取后台传值,那么需要用内联JS写法获取 [姿势很重要] 一.后台通过Model的addAttribute方法向前台传值 1.js获取后台属性值(--内联 ...
- java——包装类数据缓存 ==号详解
Java对部分经常使用的数据采用缓存技术,即第一次使用该数据则创建该数据对象并对其进行缓存, 当再次使用等值对象时直接从缓存中获取,从而提高了程序执行性能.(只对常用数据进行缓存) Java中只是对部 ...
- textarea框自适应高度
export function autoTextarea(elem, extra, maxHeight){ /**textarea文本域随内容的多少而调整高度 */ extra = extra || ...
- Jetson TX1 安装ROS操作系统
直接按照官网上的步骤安装即可,其中会出现很多bug,主要是依赖库安装的问题,添加清华源和中科大源,(注意:中科大源会有些问题)需要apt-get update 和 apt-get upgrade更新库 ...