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

利用“工厂模式+反射+配置文件”来实现解耦和 我们在利用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

描边盛开火玫瑰

python描边盛开火玫瑰 代码如下 import turtle as t t.setup(800,800) t.hideturtle() t.speed(11) t.penup() t.goto(50,-450) t.pensize(5) t.pencolor("black") t.seth(140) t.pendown() t.speed(10) t.circle(-300,60) t.fd(100) #jiaodu80 #1ye t.seth(10) t.fd(50) t.fillcolor("gr

weixin_50973371的博客 2066

CH12-Java反射机制

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

weixin_46227276的博客 1900

折叠式共源共栅放大器设计/备忘

w折叠式共源共栅基本结构如图

Czy1377004611的博客 3万+

从TCGA官网获取新版count数据并精准转换为TPM的实战指南

本文详细介绍了从TCGA官网获取新版count数据并精准转换为TPM的实战指南。通过TCGAbiolinks工具下载原始count数据,结合GENCODE v36注释文件计算基因有效长度,最终实现count到TPM的标准化转换,确保数据完整性和分析可靠性。文章包含完整代码示例和常见问题解决方案,特别适合生物信息学研究人员参考。

weixin_27310417的博客 284

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

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

zifengye520的专栏 1480

简化神经元模型6 -- Hindmarsh-Rose Model

简化神经元模型 6 Hindmarsh-Rose Model

weixin_73557167的博客 1427

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

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

Aspirin's Nest 3880

Android 12.0 SystemUI下拉状态栏定制化之隐藏下拉通知栏布局功能实现(二)

在12.0的系统定制化开发中,由于从12.0开始SystemUI下拉状态栏和11.0的变化比较大,所以可以说需要从新分析相关的SystemUI的 布局,然后做分析来实现不同的功能,今天就开始实现关于隐藏SystemUI下拉状态栏中的通知栏布局系列二,去掉下拉状态栏中 通知栏部分 白色的圆角背景

安卓兼职framework和app工程师的博客 1636

华为云计算——FusionCompute创建虚拟机

华为云计算——FusionCompute创建虚拟机

jks212454的博客 3676

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

C2f-DCN模块详解:可变形卷积与特征融合的完美结合

C2f模块作为YOLOv8的核心创新,代表了目标检测特征提取模块设计的最新进展。通过精简的卷积配置(仅2个基础卷积)、高效的特征重用设计(部分通道分割复用)、以及深层语义与浅层细节的协同建模能力,C2f在结构设计和性能表现上全面超越了前代的C3模块。与C3K2、C3K等变体相比,C2f在遮挡和密集环境下的检测鲁棒性更优,而C3K2和C3K分别在高速检测和多尺度检测方面有专门优化。这种差异化设计反映了YOLO系列模型向场景化、专业化发展的趋势。从设计原理角度看,C2f的核心优势在于其多路径梯度流动优化和。

浩瀚之水的专栏 379

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

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

kepengs的博客 783

保姆级教程:如何将仅限客户端使用的免费大模型(Gemini、Antigravity、Qwen Code、Kiro 等)转为任何应用可调用的 OpenAI 兼容标准接口

大模型 API 费用太贵?💸 这篇文章分享一个薅羊毛神器,能把 Gemini、Qwen Code、Kiro 等客户端专属的免费大模型转换成标准 OpenAI 兼容接口 🔌。支持多协议互转、账户池管理、Web 管理界面,Docker 一键部署,零成本调用 Claude Opus 4.5、Gemini 3 Pro 等高级模型 ✅

XiaoqiangClub的博客 1035

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java反射和动态代理

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

qq_53318460的博客 129

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

工厂模式(容器工厂)

实现原理:通过读取解析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、付费专栏及课程。

余额充值