Java利用spring註解做反射機制
前言:一直覺得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反射機制到Android註解框架Java反射Android框架
- 小白都能學會的Java註解與反射機制Java反射
- Java 反射機制詳解Java反射
- Java反射機制Java反射
- Java反射-註解Java反射
- java註解,反射Java反射
- JAVA中的反射機制詳解Java反射
- Java核心反射機制Java反射
- java利器——反射機制Java反射
- Java的反射機制Java反射
- Java反射機制(轉)Java反射
- Java反射機制研究Java反射
- Java反射與註解Java反射
- Java 註解和反射Java反射
- Java註解和反射Java反射
- 基於NACOS和JAVA反射機制動態更新JAVA靜態常量非@Value註解Java反射
- Java反射機制那些事Java反射
- Java 中的 反射機制Java反射
- Java反射機制簡答Java反射
- 說說 Java 反射機制Java反射
- JAVA(五)反射機制/AnnotationJava反射
- Java 反射機制分析指南Java反射
- Java 型別資訊詳解和反射機制Java型別反射
- Java之註解與反射Java反射
- Java中的反射機制(二) 一個利用反射進行物件拷貝的例子Java反射物件
- JAVA-註解(2)-自定義註解及反射註解Java反射
- 一文帶你瞭解Java反射機制Java反射
- Java中的類反射機制Java反射
- Java筆記-反射機制(一)Java筆記反射
- java進階(41)--反射機制Java反射
- 淺析java的反射機制Java反射
- Java註解與反射的使用Java反射
- 【Java基礎】反射和註解Java反射
- 【譯】8. Java反射——註解Java反射
- Java反射和註解基本用法Java反射
- 詳解 php 反射機制原理PHP反射
- Java ”框架 = 註解 + 反射 + 設計模式“ 之 註解詳解Java框架反射設計模式