Java反射---对象池

2023-11-13

在很多Java  EE 框架中都需要根据配置文件信息来创建Java对象,从配置文件读取的只是i某个类的字符串类名,程序就需要根据该字符串来创建对应的实例,就必须使用反射。

    下面程序就实现了一个简单的对象池,该对象池会根据配置文件读取name-value对,然后创建这些对象,并将这些对象放入一个HashMap中。

package com.reflect;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class ObjectPoolFactory {
	
	//定义一个对象池,前面是对象名,后面是实际对象
	private Map<String,Object> objectPool=new HashMap<String,Object>();
	//定义一个创建对象的方法
	//该方法只要传入一个字符串类名,程序就可以根据该类名生成Java对象
	private Object createObject(String clazzName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
		
		//根据字符串来获对应的Class对象
		Class<?> clazz=Class.forName(clazzName);
		//使用clazz对应的默认构造器创建实例
		return clazz.newInstance();
	}
	//该方法根据指定文件来初始化对象池
	//它根据配置文件来创建对象
	public void initPool(String fileName){
		FileInputStream fis=null;
		try {
			fis=new FileInputStream(fileName);
			Properties props=new Properties();
			props.load(fis);
			for(String name:props.stringPropertyNames()){
				//每取出一对属性名--属性值对,就根据属性创建一个对象,
				//调用createObject创建对象,并将对象添加到对象池中
				objectPool.put(name, createObject(props.getProperty(name)));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			try {
				if(fis!=null){
					fis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public Object getObejct(String name){
		//从objectPool中获取指定name对应的对象.
		return objectPool.get(name);
	}
	
	public static void main(String[] args) {
		ObjectPoolFactory pf=new ObjectPoolFactory();
		pf.initPool("D:/mavenwork/mianshi/src/com/reflect/obj.txt");
		System.out.println(pf.getObejct("a"));
		
	}
	
}

obj.txt 文件内容如下:

a=java.util.Date
b=javax.swing.JFrame

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java反射---对象池 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • 你真的了解栈溢出么?

    记得之前看过一篇文章说 最好查的bug是语法错误 因为编译器会告诉你 最不好查的bug是栈溢出 因为啥 因为不仅编译器不会告诉你 连你自己有可能都找不到原因出在哪 经过了一段时间的摸索 算是基本搞清楚了栈溢出的原理 写下来以防日后出现问题无
  • js的函数作用域跟块级作用域

    一 js中的作用域 js中除了全局作用域 还有函数作用域 嗯 还有块级作用域 二 函数作用域跟块级作用域的区别 当将代码看成一个IIFE时 全局作用域其实就是一个函数作用域 那么函数作用域跟块级作用域的区别是什么呢 函数作用域 变量在定义的
  • ERROR: cannot launch node of type [map_server/map_server]: map_server

    如上图所示 版本号为 noetic 根据ros版本号 进行安装 sudo apt get install ros noetic map server 将noetic换成你的版本号
  • 枚举的简单例题

    描述 给你n根火柴棍 你可以拼出多少个形如 A B C 的等式 等式中的A B C是用火柴棍拼出的整数 若该数非零 则最高位不能是0 用火柴棍拼数字0 9的拼法如图所示 注意 加号与等号各自需要两根火柴棍 如果A B 则A B C与B A
  • 如何删除文件夹右键菜单多余项

    如何删除文件夹右键菜单多余项 1 所有或大部分文件都有的右键菜单 打开注册表编辑器后 在 HKEY CLASSES ROOT Shellex ContextMenuHandlers 根据名称删除相应的子项 2 文件夹的右键菜单 在注册表中的
  • ST-LINK Utility 烧录 hex、bin 文件——软件下载、驱动安装、使用教程、连接问题解决

    目录 前期准备 ST LINK Utility 下载 ST LINK 驱动安装 ST LINK Utility 使用 连接设备 擦除芯片 烧录 连接问题 no stlink detected 连接设备失败的问题 参考 ST LINK Uti
  • Qt插件开发

    前言 插件是一种遵循一定规范的应用程序接口编写出来的程序 本教程说的插件是用于扩展Qt应用程序的插件 笔者做对创建和使用方法 做下简单的记录 一 Qt插件创建和使用流程 1 定义一个接口集 只有纯虚函数的类 用来与插件交流 2 用宏Q DE
  • Tensorflow构建数据输入管道方法总结

    1 通过标准的ETL结构 queue runner 构建tensorflow数据输入管道 https blog csdn net u014061630 article details 80776975 2 通过tf data API构建te
  • SQL注入介绍

    什么是sql注入 利用现有的应用程序 将恶意的sql命令注入到后台数据库引擎执行 漏洞原理 SQL注入是指Web应用程序对用户输入数据的合法性未进行判断 处理 前端传入的参数是攻击者可控的 并且参数被正常带入到数据库中执行 攻击者可以通过构
  • 非功能测试

    非功能性测试 1 兼容性测试 概念 不同平台 系统都能正常工作 测试关注点 web 浏览器 IE Chrome firefox IE以实际客户环境为准 操作系统 不同的操作系统 Windows Linux mac等 相同的操作系统不同的版本
  • 【CPP_Primer_Plus】学习助手

    学习网站推荐 cppreference learncpp cplusplus tutorialspoint awesomecpp stackoverflow 视频课程推荐 码农论坛 cpp primer plus
  • Mybatis将整数0识别为空

    本文内容整理来源 http blog csdn net john1337 article details 70230563 今天在使用mybatis时遇到一个问题 Java代码中传递的整数0在mybatis中被识别成null html vi
  • sql if判断

    判断 permission 是否等于 null 如果是null则返回 为null select ifnull permission 为null from sys menu 如果sex 1返回男 否则返回女 select if sex 1 男
  • 02-----关于将已存在的项目代码提交到git仓库(命令方式)

    上一篇我们讲述了关于如何使用TortoiseGit配合Putty将本地项目push到远程仓库 本篇将讲述Linux基于命令行的方法将项目推送到远程库 注意一些概念 工作区 暂存区和分支的区别 工作区就是我们的项目目录 暂存区就是我们git
  • 存储过程返回结果集_存储过程

    在开发SQL Server时 为了修改和扩充方便 经常会将负责不同功能的语句集中起来并且按照用途分别独立存储 以便能够反复调用 这些独立存储且拥有不同功能的语句即是 存储过程 存储过程属于数据库对象 是一种高效的 安全的访问数据库的方法 主
  • C++打印hello world

    首先我们要知道 C 中有一个很重要的东西 那就是面向对象 其中 C 中的打印和输入都是一个对象 而不是像C一样是一个函数 所以打印和输入都有一定的区别 打印是C 最基础的东西 下面我们先放代码 再逐条分析 include
  • OrangePIPC2---uboot flash的适配

    下载uboot源码 去我的github上下载源码 或者官方uboot都行 由于我还没装git所以先临时下载用用 解压 unzip XXX zip即可 编译 export CROSS COMPILE aarch64 linux gnu mak
  • Java获取Set中第一个值

    Map
  • [1227]在浏览器里面运行命令行ttyd

    文章目录 Web Terminal 安装 使用 基本使用 绑定端口 Basic Auth 自动打开浏览器 Docker 支持 SSH 终端 SSL 支持 更多 公网暴露 总结 Web Terminal ttyd https github c
  • Java反射---对象池

    在很多Java EE 框架中都需要根据配置文件信息来创建Java对象 从配置文件读取的只是i某个类的字符串类名 程序就需要根据该字符串来创建对应的实例 就必须使用反射 下面程序就实现了一个简单的对象池 该对象池会根据配置文件读取name v