前言:一直觉得spring提供的注解装配bean机制非常的好,尤其是在做类似Java反射机制的时候太方便了,下面就依据项目需求进行一次记录,方便以后使用。
需求一句话:为每家交易所自动加载指定的结算银行。
需求分析:项目中需要适配很多家交易所,而每家交易所都有自己指定的结算银行,或者一家或者多家,那么项目在A交易所运行时,能够自动加载A家交易所指定的结算银行A1、A2,项目在B交易所运行时,能够自动加载B家交易所指定的结算银行B1。
解决方案:1.通过配置文件为项目确定交易所的结算银行
#A
banks=A1,A2
#B
#banks=B1
2.项目加载时,将配置信息加载到manager管理类中
// 加载配置文件
String path = Manager.class.getClass().getResource("/").getPath() + "conf/bank.properties";
Properties p = new Properties();
p.load(new FileInputStream(new File(path)));
list = new ArrayList<String>();
String banks = p.getProperty("banks");
if (banks.indexOf(",") != -1) {
String[] bankstr = banks.split(",");
for (String bank : bankstr) {
list.add(bank.toUpperCase());
}
} else {
list.add(banks.toUpperCase());
}
3.准备工作做好后,关键的地方来了,了解银行结算的都知道,每日交易所需要向结算银行签到,那么每家银行的签到方式是不一样的,现在我们为A1、A2、B1银行先做好签到方法
public class A1CheckInThread implements Runnable {
private static Logger logger = Logger.getLogger(A1CheckInThread.class);
@Override
public void run() {
try {
logger.info("进行A1签到...");
A2、B3的签到方法我就不写了,分别为
A2CheckInThread、<pre name="code" class="java">B1CheckInThread
现在问题来了,如何利用配置信息A1、A2、B3来运行对应的签到方法呢,大家可能第一想到的就是Java的反射机制,利用A1、A2、B1字符串来找到对应的类,进行启动。这个我就不说了,一般情况下,我们的项目都是用到了spring,那么有spring,他为我们提供了更多的选择,spring在启动时,会通过applicationContext.xml中的“<context:component-scan base-package="com.honzh">”元素对有spring注解的类进行自动装配,OK,我们改造一下A1CheckInThread类
@Component
public class A1CheckInThread implements Runnable {
加上该注解后,就表明该类是一个spring组件,然后我们利用一个spring管理类进行bean类的获取工作
public class SpringUtils {
private static ApplicationContext factory;
private SpringUtils() {
};
public synchronized static ApplicationContext getSpringContext() throws BeansException {
if (factory == null) {
factory = new ClassPathXmlApplicationContext("applicationContext.xml");
}
return factory;
}
/**
* @Title: startRunnable
* @Description: 将指定的runnable启动
* @param lastRunnableName
*/
public static void startRunnable(String lastRunnableName) {
for (String bank : getList()) {
logger.info(bank + lastRunnableName + "开始启动");
Runnable runnable = SpringUtils.getRunnableByName(bank + lastRunnableName);
new Thread(runnable).start();
}
}
在项目运行时,我们通过
// spring 初始化
SpringUtils.getSpringContext();
然后通过指定"A1CheckInThread",方法getRunnableByName就会获取对应的实例化的A1CheckInThread类,如此我们在进行签到的时候,就可以这样
for (String bank : getList()) {
logger.info(bank + lastRunnableName + "开始启动");
Runnable runnable = SpringUtils.getRunnableByName(bank + lastRunnableName);
new Thread(runnable).start();
}
其中lastRunnableName就是“CheckInThread”。
总结:这个机制经常会用到,但是没有找到方式的话就比较纠结,另外这样即使A交易所有了A3的结算银行,我们只需要在配置文件修改一下,加载好对应A3的签到方法,就OK了。
相关推荐
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...
Java反射和Spring IOC是Java开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...
通过这个实战项目,你可以深入理解Java反射、泛型和注解的用法,并且了解到如何利用它们构建一个基本的依赖注入系统,这将有助于你更好地理解和使用Spring框架。同时,这样的实践也有助于提升你的编程技能,使你能够...
通过深入理解Spring中的反射机制,开发者可以更有效地利用Spring框架,提高代码的可维护性和可扩展性。同时,反射也带来了一些潜在的问题,比如性能开销和安全风险,因此在实际使用中需要适度控制和优化。总的来说,...
总的来说,Spring的IOC结合Java反射和自定义注解,构建了一种灵活且强大的组件管理和依赖注入机制。通过深入理解这些概念,开发者可以更好地利用Spring框架,实现松耦合、高内聚的软件设计。在实际项目中,可以使用`...
Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象的内部信息,即使这些信息在编译时并不知道。这一机制使得Java具有了高度的动态性,能够实现元编程,即在程序...
这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在框架和库的开发中,如Spring框架,它大量利用了反射机制。 在上述的示例中,`Util` 类的 `convertStr2ServiceBean` 方法展示了如何通过反射来创建对象...
Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念...
Java注解机制是Java语言中的一种元数据 Facility,提供了一种在编译期和运行期对Java代码进行标记和描述的机制, Spring框架中使用Java注解机制来实现自动装配功能。自动装配是指Spring框架根据注解信息来自动将Bean...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...
Java反射机制是Java编程语言中一项强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息,并且可以动态调用对象的方法,创建对象,甚至修改对象...
总结来说,Java的反射机制和注解是两种强大的工具,它们增强了代码的动态性和元数据功能。在设计和实现复杂系统时,正确地运用这些特性可以提高代码的灵活性和可维护性,但也需要注意潜在的性能和安全性问题。在实际...
Java注解、反射、字节码和类加载机制是Java编程中的核心概念,它们在实际开发中扮演着重要角色。让我们深入探讨这些知识点。 **Java注解(Annotation)**: Java注解是一种元数据,它提供了在编译时或运行时处理代码的...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地创建对象、调用方法、访问字段,甚至修改私有成员,这为实现元编程和框架设计...
- **动态代理**:Java的动态代理机制(`java.lang.reflect.Proxy`)利用反射实现代理类的创建。 - **元数据处理**:例如处理注解(annotations),获取带有特定注解的类、方法等。 - **通用工具类**:例如深度拷贝、...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这种能力使得Java代码能够在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用...
这篇博客"使用反射和注解模拟Spring的依赖注入"探讨了如何通过基本的Java特性来实现类似Spring的功能。我们将深入探讨反射和注解这两个关键概念,以及它们如何在模拟依赖注入中发挥作用。 首先,让我们理解反射的...
反射机制使得Java程序能够在运行时动态地获取类的信息,包括类名、包信息、属性、方法、注解等,并能够动态地调用对象的方法和访问其属性,即使这些方法或属性是私有的。在Java中,反射主要涉及`java.lang.Class`和...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、对象等的内部信息。这一机制的核心在于Java.lang.reflect包,它提供了Class、Constructor、Method和Field等类,使得我们可以...