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的话建议去找一些java视频教程来看看。他为我们提供了更多的选择,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;
}

<span style="white-space:pre">    </span>/**
<span style="white-space:pre">    </span>* @Title: getRunnableByName
<span style="white-space:pre">    </span>* @Description: 根据runnable类名称获取对应的装配bean.
<span style="white-space:pre">    </span>* @param runnableName
<span style="white-space:pre">    </span>* @return
<span style="white-space:pre">    </span>*/
<span style="white-space:pre">    </span>public static Runnable getRunnableByName(String runnableName) {
<span style="white-space:pre">     </span>return factory.getBean(runnableName, Runnable.class);
<span style="white-space:pre">    </span>}

在项目运行时,我们通过
// 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了。

时间: 2024-08-29 20:05:46

spring注解完成java反射机制的相关文章

利用spring注解做类似Java反射机制

前言:一直觉得spring提供的注解装配bean机制非常的好,尤其是在做类似Java反射机制的时候太方便了,下面就依据项目需求进行一次记录,方便以后使用. 需求一句话:为每家交易所自动加载指定的结算银行. 需求分析:项目中需要适配很多家交易所,而每家交易所都有自己指定的结算银行,或者一家或者多家,那么项目在A交易所运行时,能够自动加载A家交易所指定的结算银行A1.A2,项目在B交易所运行时,能够自动加载B家交易所指定的结算银行B1. 解决方案:1.通过配置文件为项目确定交易所的结算银行 #A b

Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring

IOC(Inverse of Control) 可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”.在Spring中,通过IOC可以将实现类.参数信息等配置在其对应的配置文件中,那么当 需要更改实现类或参数信息时,只需要修改配置文件即可,这种方法在上例的基础上更进一步的降低了类与类之间的耦合.我们还可以对某对象所需要的其它对象进 行注入,这种注入都是在配置文件中做的,Spring的IOC的实现原理利用的就是Java的反射机制, Spring还充当了工厂的角色,我们不需要自己建立工厂类.S

Java 反射机制

使用 Java 反射机制可以在运行时期检查 Java 类的信息,检查 Java 类的信息往往是你在使用 Java 反射机制的时候所做的第一件事情,通过获取类的信息你可以获取以下相关的内容: Class 对象 类名 修饰符 包信息 父类 实现的接口 构造器 方法 变量 注解 除了上述这些内容,还有很多的信息你可以通过反射机制获得,如果你想要知道全部的信息你可以查看相应的文档 JavaDoc for java.lang.Class 里面有详尽的描述. 在本节中我们会简短的涉及上述所提及的信息,上述的

探索Java反射机制

Java反射机制,可以说我们平常开发中用的很多,尽管作为开发人员,我们并没有什么感觉,那是因为框架的设计者,已经为我们封装好了,我们只需要用去调用一下就可以了.以前也用到过反射,包括自己也写过,也学到过,但是我感觉都比较浅,今天有时间,我觉得有必要去慢慢的深入了解一下. 我们把能够分析类能力的程序称为反射(reflective).反射机制功能及其强大,简单说几个反射的用途: 1.在运行中分析类的能力: 2.在运行中查看对象,例如编写一个通用的tostring方法: 3.实现通用的数组操作代码:

Java知识总结:Java反射机制(用实例理解)

概念理解: 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来 实现对自己行为的描述( self-representation )和检测( examination) ,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. Java中的反射是一个强大的工具,他能够创建灵活的代码,这些 代码可以在运行时装配,无需在组件之间进行链接,发射允许在编写和执行时,使程序代码能够接入装载到 JVM 中的类的内部信息 .而不是源代码中选定的类协作的代码.这使发射

Java反射机制详解

Java反射机制详解 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制. 1.关于Class 1.Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性    2.对象照镜子后(反射)可以得到的信息:某个类的数据成员名.方法和构造器.某个类到底实现

Java 反射机制(包括组成、结构、示例说明等内容)

http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据"类的部分已经的信息"来还原"类的全部的信息".这里"类的部分已经的信息",可以是"类名"或"类的对象"等信息."类的全部信息"就是指"类的属性,方法,继承关系和Annotation

java基础知识(十一)java反射机制(下)

1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. 也就是说,java程序可以加载一个运行时才得知名称的class,获悉该类的完整构造(但不包括methods定义),并生成其对象实体,或对其fields设值,或唤起其methods.总之,就是JVM可以在运行时加载.探知.使用编译期完全未知的classes. 2.jdk提供的反射api Java反射相

java 反射机制 Demo 练习

最近在研究java 反射机制,看网上视频,并抄了下来研究,用到Servlet 注解,绝不亚于SpringMVC 的注解使用,特此记录分享,Servlet 再也不用为传递参数而判断担忧了,专注业务! 1. 首先定义一个父类,所有的业务操作全部继承之. 1 package controller; 2 3 import java.io.IOException; 4 import java.lang.reflect.Method; 5 6 import javax.servlet.ServletExce