`
susam
  • 浏览: 104955 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java利用spring注解做反射机制

    博客分类:
  • java
 
阅读更多

前言:一直觉得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编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...

    Java反射_Spring IOC

    Java反射和Spring IOC是Java开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...

    Java反射、泛型和注解实战之Spring核心注入IOC的实现

    通过这个实战项目,你可以深入理解Java反射、泛型和注解的用法,并且了解到如何利用它们构建一个基本的依赖注入系统,这将有助于你更好地理解和使用Spring框架。同时,这样的实践也有助于提升你的编程技能,使你能够...

    Java_Spring反射

    通过深入理解Spring中的反射机制,开发者可以更有效地利用Spring框架,提高代码的可维护性和可扩展性。同时,反射也带来了一些潜在的问题,比如性能开销和安全风险,因此在实际使用中需要适度控制和优化。总的来说,...

    Spring IOC 原理 ,Java 反射实例,自定义注解

    总的来说,Spring的IOC结合Java反射和自定义注解,构建了一种灵活且强大的组件管理和依赖注入机制。通过深入理解这些概念,开发者可以更好地利用Spring框架,实现松耦合、高内聚的软件设计。在实际项目中,可以使用`...

    Javafanshe.rar_java 反射_java反射_反射_反射机制

    Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象的内部信息,即使这些信息在编译时并不知道。这一机制使得Java具有了高度的动态性,能够实现元编程,即在程序...

    java 反射机制详解

    这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在框架和库的开发中,如Spring框架,它大量利用了反射机制。 在上述的示例中,`Util` 类的 `convertStr2ServiceBean` 方法展示了如何通过反射来创建对象...

    北大青鸟java反射机制

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念...

    Java注解机制之Spring自动装配实现原理详解

    Java注解机制是Java语言中的一种元数据 Facility,提供了一种在编译期和运行期对Java代码进行标记和描述的机制, Spring框架中使用Java注解机制来实现自动装配功能。自动装配是指Spring框架根据注解信息来自动将Bean...

    实战java反射机制-让你迅速认识java强大的反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...

    java反射机制PPT

    Java反射机制是Java编程语言中一项强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息,并且可以动态调用对象的方法,创建对象,甚至修改对象...

    Java学习资料-反射机制和注解

    总结来说,Java的反射机制和注解是两种强大的工具,它们增强了代码的动态性和元数据功能。在设计和实现复杂系统时,正确地运用这些特性可以提高代码的灵活性和可维护性,但也需要注意潜在的性能和安全性问题。在实际...

    java注解_反射_字节码_类加载机制.zip

    Java注解、反射、字节码和类加载机制是Java编程中的核心概念,它们在实际开发中扮演着重要角色。让我们深入探讨这些知识点。 **Java注解(Annotation)**: Java注解是一种元数据,它提供了在编译时或运行时处理代码的...

    Java反射机制源码

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地创建对象、调用方法、访问字段,甚至修改私有成员,这为实现元编程和框架设计...

    Java反射机制总结(实例分析)

    - **动态代理**:Java的动态代理机制(`java.lang.reflect.Proxy`)利用反射实现代理类的创建。 - **元数据处理**:例如处理注解(annotations),获取带有特定注解的类、方法等。 - **通用工具类**:例如深度拷贝、...

    java反射机制文档

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这种能力使得Java代码能够在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用...

    使用反射和注解模拟Spring的依赖注入

    这篇博客"使用反射和注解模拟Spring的依赖注入"探讨了如何通过基本的Java特性来实现类似Spring的功能。我们将深入探讨反射和注解这两个关键概念,以及它们如何在模拟依赖注入中发挥作用。 首先,让我们理解反射的...

    Java核心知识体系:反射机制详解.pdf

    反射机制使得Java程序能够在运行时动态地获取类的信息,包括类名、包信息、属性、方法、注解等,并能够动态地调用对象的方法和访问其属性,即使这些方法或属性是私有的。在Java中,反射主要涉及`java.lang.Class`和...

    Java反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、对象等的内部信息。这一机制的核心在于Java.lang.reflect包,它提供了Class、Constructor、Method和Field等类,使得我们可以...

Global site tag (gtag.js) - Google Analytics