osgi对于java的模块化提供了极大的好处,但是对于习惯了利用java进行编程的同志,在利用全局的数据时,感觉到要跨越多个bundle,不是很方便,但是在spring的编程中,利用常量进行bean的属性设置和在代码中应用,对于保持一个参量赋值的唯一性非常必要。
于是想到利用osgi中的service,来共享一个常量设置的思路:
1、首先在一个公用的bundle中,定义一个常量的存储类:
public class GlobalConstantsImpl implements GlobalConstants {
private static int SRC_DATA_SINA_T_DETAIL ;
private static int SRC_DATA_AIGAOGAO_S_DAY;
private static int SRC_DATA_AIGAOGAO_S_INDEX;
public GlobalConstantsImpl(int sRCDATASINATDETAIL, int sRCDATAAIGAOGAOSDAY,
int sRCDATAAIGAOGAOSINDEX) {
super();
SRC_DATA_SINA_T_DETAIL = sRCDATASINATDETAIL;
SRC_DATA_AIGAOGAO_S_DAY = sRCDATAAIGAOGAOSDAY;
SRC_DATA_AIGAOGAO_S_INDEX = sRCDATAAIGAOGAOSINDEX;
}
/* (non-Javadoc)
* @see org.tkxing.stock.utils.gconst.GlobalConstants#getSRC_DATA_SINA_T_DETAIL()
*/
public int getSRC_DATA_SINA_T_DETAIL() {
return SRC_DATA_SINA_T_DETAIL;
}
/* (non-Javadoc)
* @see org.tkxing.stock.utils.gconst.GlobalConstants#getSRC_DATA_AIGAOGAO_S_DAY()
*/
public int getSRC_DATA_AIGAOGAO_S_DAY() {
return SRC_DATA_AIGAOGAO_S_DAY;
}
/* (non-Javadoc)
* @see org.tkxing.stock.utils.gconst.GlobalConstants#getSRC_DATA_AIGAOGAO_S_INDEX()
*/
public int getSRC_DATA_AIGAOGAO_S_INDEX() {
return SRC_DATA_AIGAOGAO_S_INDEX;
}
这个类中,一属性是私有的,不能够在其他的地方赋值;二各个属性没有set方法,所以能够保证各个属性的值,只能够通过配置注入。
2、然后再这个bundle中,注册一个service。
<osgi:service ref ="globalConstant" interface ="org.tkxing.stock.utils.gconst.GlobalConstants"/>
3、在其他应用这些常量的地方,首先引用注册的service,然后通过spring的spel引用,就可以了:
<osgi:reference id="globalConstants" interface ="org.tkxing.stock.utils.gconst.GlobalConstants"/>
在spring的配置文件中,如下引用
#globalConstants.SRC_DATA_SINA_T_DETAIL