把大象放進冰箱 spring自動掃瞄並發布rmi

2021-09-11 09:17:39 字數 2688 閱讀 5447

title: 把大象放進冰箱--spring自動掃瞄並發布rmi tags:

對於需要暴露大量rmi的應用來說,每次新增加乙個service都需要手寫一段xml也是蠻累的……

偷懶的程式設計師想到了如下的辦法

利用component-scan發布service同時發布rmi呢?

說做就做

開啟冰箱門

首先需要把所有的@service註解掃瞄,設定beandefinition的相關屬性包括service,servicename等

把大象塞進冰箱

將beandefinition註冊到spring容器中

關上冰箱門

初始化對應的beandefinition

具體**如下

/**

* created by qixiaobo on 2016/10/8.

*/public

class

publishrmibean

implements

") private

int port;

private metadatareade***ctory metadatareade***ctory = new cachingmetadatareade***ctory(this.resourcepatternresolver);

private

static

final listincludefilters = new linkedlist<>();

private

static

final string default_resource_pattern = "**/*.class";

public string getbasepkg

()

public

void

setbasepkg

(string basepkg)

static

@postconstruct

public

void

init

()throws ioexception else

string beanname = rminamegenerator.getbeanname(clazzname.substring(clazzname.lastindexof(".") + 1));

registerrmi(clazz, beanname);}}

} catch (throwable e) }}

try catch (exception ex)

}private

void

registerrmi

(class clazz, string beanname)

builder.addpropertyvalue("serviceinte***ce", clazz.getinte***ces()[0]);

builder.addpropertyvalue("servicename", beanname);

builder.addpropertyvalue("registryport", port);

builder.addpropertyreference("remoteinvocationexecutor", "clientinforemoteinvocationexecutor");

builder.addpropertyvalue("service", context.getbean(clazz));

builder.setlazyinit(false);

getbeandefinitionregistry().registerbeandefinition(beanname + "exporter", builder.getrawbeandefinition());

logger.info("publish rmi:" + beanname);

}private beandefinitionregistry getbeandefinitionregistry

()

private

boolean

iscandidatecomponent

(metadatareader metadatareader)

throws ioexception

}return

false;

}private

boolean

iscandidatecomponent

(annotatedbeandefinition beandefinition)

@override

public

void

throws bean***ception

private string resolvebasepackage

(string basepackage)

}複製**

在spring的xml中註冊如下

複製**

class="com.***.publishrmibean" >

name="basepkg"

value="com.***.service.*.impl"/>

bean>

複製**

複製**

把大象放進冰箱裡 資源的開啟 應用與關閉

冰箱名是記憶體上的臨時資料,是乙個字串或者乙個整數,是資源的乙個代號。冰箱是對資源的乙個引用,對此引數操作會對實際資源產生影響。誰建立了資源的引用,誰就有義務關閉資源引用,以避免影響其它程式使用。使用資源管理類 如資料庫連線池 統一管理資源的引用,需要使用資源的函式向資源管理類申請,只使用而不用關心...

物件導向之把大象裝進冰箱

將大象裝進冰箱 面向過程 定義乙個類,class demo 將上面的三個功能使用方法改進 public static void open public static void in public static void close 物件導向 需求 將大象裝進冰箱 1 這個需求中有幾個類,使用uml語...

把大象裝進冰箱的N種方法

一物理學的辦法 小學生 已知冰箱的高為10公尺,底面為邊長30公尺的正方形 初中生 大象在凸透鏡2倍焦距外,在冰箱里成倒立放大實象。高中生 把大象看成乙個質點 成績好的高中生 老師這道題不會做,請給我們講解一下 高中老師 這道題屬於怪題,考試中遇到一定要果斷的捨棄。大學生 讓大象高速通過冰箱,根據尺...