利用反射读取配置文件中的具体实现类

利用“工厂模式+反射+配置文件”来实现解耦和 我们在利用java的三层架构开发时,如果用Web层直接创建service层,然后再用service层直接创建dao层 ,这样的话如果我们底层的实现类发生了变化,我们就要去修改源代码了,这很显然不是很符合开发的要求。那这个问题应该怎么解决呢?对,我们可以通过利用“工厂模式+反射+配置文件”的模式来降低耦合度,从而只是通过修改配置文件就能实现我们的需求。 下面我们先通过案例的形式来分析一下传统模式、 阅读详情

该博客用于简单模拟如何利用反射读取配置文件中的具体实现类,一般框架的底层实现原理就是如此的。

1、配置文件config.properties文件中的代码:

#className=java.util.ArrayList
className=java.util.HashSet

2、实例类ReflectPoint.java中的代码

package cn.sunft.day01.reflect;

/**
 * 定义一个点的类,供反射测试用
 * @author sunft
 *
 */
public class ReflectPoint {
	
	private int x;
	public int y;
	public String str1 = "ball";
	public String str2 = "basketball";
	public String str3 = "itcast";
	
	
	public ReflectPoint(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + x;
		result = prime * result + y;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ReflectPoint other = (ReflectPoint) obj;
		if (x != other.x)
			return false;
		if (y != other.y)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return str1 + ":" + str2 + ":" + str3;
	}
	
}

3、测试类ReflectCollection.java中的代码

package cn.sunft.day01.reflect;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Collection;
import java.util.Properties;

/**
 * 
 * @author sunft
 *
 */
public class ReflectCollection {

	public static void main(String[] args) throws Exception {
		InputStream ips = new FileInputStream("config.properties");
		Properties props = new Properties();
		props.load(ips);
		ips.close();
		String className = props.getProperty("className");
		//这里默认会调用无参数的构造方法
		Collection collections = (Collection) Class.forName(className)
				.newInstance();
		
		ReflectPoint pt1 = new ReflectPoint(3, 3);
		ReflectPoint pt2 = new ReflectPoint(5, 5);
		ReflectPoint pt3 = new ReflectPoint(3, 3);
		
		collections.add(pt1);
		collections.add(pt2);
		collections.add(pt3);
		collections.add(pt1);
		
		System.out.println(collections.size());
	}

}

Java反射之读取配置文件案例 定义配置文件run.properties内容如下: className=com.zgjy.reflect.Person methodName=getSum 通过读取配置文件内容,使用反射运行对应Person类中的对应方法getSum 分析: 1.有配置文件—>读取配置文件内容—>提取出有消息,反射需要的信息1) 完整包名的类名 2) getSum方法 2.读取配置文件,使用Hashta... 阅读详情

相关推荐

java反射机制学习(二):通过反射获取构造方法并实例化对象

NULL 博文链接:https://1017401036.iteye.com/blog/2343705

利用反射实现通过读取配置文件对类进行实例化-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)

现在有一个项目,项目中创建了一个Person类,在Person类中定义了一个sleep()方法。在工程中还定义了一个Student类继承Person类,在Student类中重写了Person类的sleep()方法。项目有一个配置文件,名称为test.properties,在配置文件中配置了一个className属性和一个methodName属性,className属性值是类的全限定类名,methodName属性值是方法名。 本案例要求通过读取配置文件对类进行实例化,具体如下: (1)获取test.pro

芝麻的博客 1080

LlamaIndex 入门实战

LlamaIndex是一个“数据框架”,用于帮助构建LLM应用程序。它提供了各种工具,包括数据连接器,用于摄取现有数据源和数据格式(API,PDF,文档,SQL等),以及用于将数据结构化(索引,图形)以便与LLM轻松使用的方式。此外,LlamaIndex还提供了高级的检索/查询接口,可以输入任何LLM输入提示,并返回检索到的上下文和增强知识的输出。它还允许与外部应用程序框架(如LangChain,Flask,Docker,ChatGPT等)轻松集成。

AIGC搞起 1万+

CH12-Java反射机制

文章目录【案例12-1】:重写toString()方法**【案例介绍】****【案例目标】****【案例分析】****【案例实现】**【案例12-2】:速度计算**【案例介绍】****【案例目标】****【案例分析】****【案例实现】**【案例12-3】:利用反射实现通过读取配置文件对类进行实例化**【案例介绍】****【案例目标】****【案例分析】****【案例实现】** 【案例12-1】:重写toString()方法 【案例介绍】 1.案例描述 ​ 为了方便输出对象,Object类提供了toStr

weixin_46227276的博客 1900

使用Kettle进行数据同步(增量)

文章目录kettle介绍kettle安装kettle使用使用kettle同步关系型数据库数据(MySQL示例)1. 创建一个转换2. 选择表输入3. 格式转换4. 执行脚本5. 创建job使用kettle同步NoSql数据(MongoDB示例)创建转换时的注意事项MongoDBInput怎么创建job的创建如何在Linux上面运行已经创建好的job?1、把创建好的job传输到Linux机器上面2、编辑kjb文件3、执行任务 kettle介绍 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写

JenKin的博客 7351

qt使用qxlsx实现xlsx、xls表格文件快速写入和读取

新年第二篇文章,收尾一个去年计划中发表文章和实现功能。

kbq的博客 1万+

java反射的学习,并实现一个小案例:从配置文件获取类和方法,并执行方法

java反射基础知识的学习,getFields,getDeclaredFields区别,getMethods,getDeclaredMethods区别

zifengye520的专栏 1480

ollama服务暴露公网?三步搞定Nginx反向代理配置(避坑指南)

本文详细介绍了如何通过Nginx反向代理安全地将Ollama服务暴露到公网,避免直接修改OLLAMA_HOST带来的安全隐患。文章提供了从SSL证书部署到高级安全加固的全流程实战指南,包括IP白名单、基础认证、速率限制等企业级安全措施,帮助用户实现安全可靠的外部访问。

wood5的博客 178

Springboot根据配置文件动态注入接口实现类

需求 最近在做一个Springboot项目,需要面向不同需求的客户,但是为了方便管理分支,需要将不同客户的需求都写到同一套代码中,根据不同客户实例化对应的实现类。 实现 为了尽量不修改代码,少做不必要的逻辑判断,我们考虑为不同客户写不同的Service,然后根据配置参数实例化对应的Service。这样就遇到了需要根据配置文件实现不同类的需求。 针对这一需求大致有两种实现方式。但是针对我的需求,能用的只有第二种,但还是想将第一种一起总结一下。 两种方式都需要给定义接口,并针对不同客户对接口做不.

Aspirin's Nest 3880

协方差矩阵

对两个类内协方差矩阵进行对角化,可以将它们变换为对角矩阵。这个过程可以通过对每个协方差矩阵进行特征值分解来实现,从而得到它们的特征向量和特征值,进而得到它们的对角矩阵形式。这个过程的意义在于,它可以帮助我们找到一个新的坐标系,使得在这个坐标系下,每个特征之间都是独立的,从而简化了计算。具体来说,当我们使用对角协方差矩阵作为特征向量的坐标系时,它意味着每个特征之间都是相互独立的,从而方便了进一步的分析和处理。在实际应用中,对角化协方差矩阵可以用于降维、特征选择和分类等任务。

m0_55196097的博客 1万+

Ubuntu20.04系统笔记本网卡AX211无法找到wifi问题

之前电脑的系统是18.04基本上安装好了系统,可以直接连上wifi,在买了拯救者y9000p2022版本之后,因为网卡太新,安装ubuntu18.04或者20.04之后会没有wifi连接,非常不方便。于是上网找了各种帖子去解决这个问题。具体实现有所不同。 主要参考了这个帖子来解决的:http://t.csdn.cn/7807R 首先: sudo apt install flex bison 然后: git clone https://github.com/intel/backpor.

weixin_42825962的博客 1万+

java 通过读取配置文件的方式来使用反射完成对实例对象方法调用

web.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app SYSTEM "../lib/web-app_2_3.dtd" > <web-app version="2.3"> <servlet> <servlet-name>MyServlet1</servlet-name> <servlet-class>com.dxm.servlet.My.

dxm809的博客 369

LVGL在RTOS下的线程安全实践:从卡死到流畅的界面切换

本文探讨LVGL在RTOS环境下的线程安全实践,重点分析FreeRTOS多任务同步机制,包括互斥锁、任务通知和消息队列方案。通过实际案例展示如何避免界面卡顿和系统死锁,实现从卡死到流畅的界面切换,为嵌入式GUI开发提供可靠的适配解决方案。

uran的专栏 1112

到底如何使用工厂模式和反射实现程序的解耦?

前置 耦合:程序之间的依赖。包括类之间的依赖、方法之间的依赖。 解耦:降低程序之间的依赖。 开发中解耦的目标:尽量做到编译期不依赖,运行时依赖 解耦的思路: 1、通过反射的方式创建对象,尽量避免使用new关键字创建对象。 2、通过读取配置文件获得要创建对象的全限定类名。 3、通过工厂模式,以JavaBean的形式来创建对象。(JavaBean的意思是Java语言编写的可重用组件) 代码示例 1、JavaBean组件的配置文件 需要在程序中以new的形式创建实例的JavaBean,以key

kepengs的博客 783

ESP32开发板使用Arduino实现变成蓝牙鼠标教程

通过这个教程,你可以轻松将ESP32开发板变成蓝牙鼠标。如果你在使用过程中遇到任何问题,或者库没有正常工作,不妨下载我上传的修复版本,再试试看。希望你们能根据这个基础做出更多有趣的蓝牙控制项目!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 968

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java反射和动态代理

动态代理相当于是只需要提供一个接口和方法,而不需要这个接口的具体实现。便可以在运行时候创建一个class文件不存在的类。反射机制允许用户从配置文件中读取要反射的类和方法,但是前提是这个类项目中有这个类。动态代理可以通过配置文件来创建接口的实现类,并通过拦截的方式执行配置文件中的方法。反射可以通过配置文件动态选择类和方法,但是不能更改已经写好的方法内容.

qq_53318460的博客 129

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[Java基础]反射案列

pro.properties文件(该文件与ReflectTest01同处在同一个文件夹); className = domain.Person methodName = eat 代码如下: package domain; public class Student { public void sleep() { System.out.println("sleep..."); } } package domain; public class Person ..

m0_51955470的博客 176

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

工厂模式(容器工厂)

实现原理:通过读取解析xml配置文件,拿到相应的类名和类的包全名,将类名存到map集合中的key值,再通过反射得到相应的实例,从而动态的生产不同的对象出来 1.新建两个接口,Phone的接口,里面有两个方法,打电话和发消息的方法;Pad的接口,玩游戏的方法 2.三个实现类,HuaiPhone类和VivoPhone类实现Phone接口的所有方法,PadPhone类实现Pad接口的...

weixin_34144848的博客 248

反射(实例:通过读取配置文件的方式来使用反射完成对实例对象方法调用)

反射1、什么是反射技术?动态获取指定类以及类中的内容(成员),并运行其内容。应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象。这时可以根据配置文件的类全名去找对应的字节码文件,并加载进内存,并创建该类对象实例。这就需要使用反射技术完成2、获取class对象的三种方式获取Class对象的方式一:通过对象具备的getClass方法(源于Object类的方法)。有点不方便,需要用到该类,...

trouble is a friend 1774

java反射案例通过读取配置文件调用类方法

package Reflects; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import ...

qq_36466946的博客 96

java利用反射实现文件的读取

java反射 java从很早的版本开始就引入了反射机制,java如今的框架底层大部分也都是使用反射实现的。 这篇博客就去探索下java反射使用的方便之处。 要说java的反射机制,肯定离不开Class这个类,我们从jdk的源码可以看到这个类在jdk1.0的时候就存在了。 由于我这边需要用到文件读写的功能,同时又希望写的方法相对来说比较抽象,能在多出直接使用,于是我就想到了java的反射机制。 首先这边先把我的读取文件的方法展示出来 这个是用到的接口类 /** * 实现该接口中的方法,本来打算在Fil

jjj___jjj的博客 3万+

java读取配置文件,利用反射根据配置文件执行方法

需求:根据配置文件中的内容创建相应的类的对象,并执行相应的方法 实现: 配置文件 反射 步骤: 将需要创建的对象的全类名和需要执行的方法定义在配置文件中 在程序中加载读取配置文件 使用反射技术来加载类文件进内存 创建对象 执行方法 注意:需要将配置文件放在src目录下,放在src目录下的任何文件,都会被编译到classes目录下,这样做的目的是为了让配置文件跟随编译后的class文件一起,因为交付用户使用的是class文件,而不是源代码。 如何读取src目录下的文件:使用类的加载器ClassLoad

克豪的博客 2080

通过反射读取properties配置文件信息

通过反射读取properties配置文件信息 实体类jdbc package 反射.com.zhao.JDBC; /** * 标准实体类 */ public class Jdbc { private String username; private String password; private String url; private String driver; private String log; public Jdbc() { }

qq_19900329的博客 900

java的反射加载配置文件_使用反射读取配置文件示例

使用反射读取配置文件在以前学习接口的时候,可能你做过类似下面的练习。创建一个Car汽车接口,里面提供一个drive方法package com.monkey1024.car;/*** 汽车*/public interface Car {void drive();}然后创建三个汽车的实现类:奥迪:package com.monkey1024.car.impl;import com.monkey1024...

weixin_29227425的博客 528

通过读取配置文件的方式来使用反射完成对实例对象方法的调用

实现的功能如题,通过读取配置文件的方式来使用反射完成对实例对象方法的调用。 废话不多说,直接演示,先准备一个接口: public interface IMyServlet { public void init(); public void service(); public void destory(); } 然后再创建一个实现类,实现上面的接口: public...

u012149181的博客 914

读取配置文件,利用反射给类属性赋值,

背景:项目中用的全局变量,一般通过形如 pubic static final String ABC="abc";然后在项目中用类.属性名的方式调用。 如果变量的值并不固定。比如不同客户定义的值不同,就不能用final修饰。只能用public static String ABC;方式来声明,也可加默认初始值; 这个时候我们就需要一个初始化方法(init())来对变量进行初始化赋值

一步一步走 4407
上一篇: ArrayList_HashSet的比较及hashCode分析
下一篇: 以管理员模式运行可以成功在Win10下安装Oracle11g
Nazarite_KakaLuoTo
博客等级 码龄10年 49粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值