@zenbeni已經回答了這個問題,但我想告訴你我的執行情況,很難將噴嘴/螺栓作爲彈簧豆。但是要在你的噴嘴/螺栓內使用其他彈簧,你可以在執行方法中聲明一個全局變量&檢查變量是否爲空。如果它爲空,則必須從應用程序上下文獲取bean。創建一個包含初始化bean的方法的類,如果它尚未初始化。查看ApplicationContextAware接口以獲取更多信息(Spring bean重用)。
示例代碼:
螺栓類:
public class Class1 implements IRichBolt{
Class2 class2Object;
public void prepare() {
if (class2Object== null) {
class2Object= (Class2) Util
.initializeContext("class2");
}
}
}
的Util類初始化豆如果尚未初始化:
public class Util{
public static Object initializeContext(String beanName) {
Object bean = null;
try {
synchronized (Util.class) {
if (ApplicationContextUtil.getAppContext() == null) {
ApplicationContext appContext = new ClassPathXmlApplicationContext("beans.xml");
bean = ApplicationContextUtil.getAppContext().getBean(
beanName);
} else {
bean = ApplicationContextUtil.getAppContext().getBean(
beanName);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return bean;
}
}
監聽器應用環境的變化:
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext appContext;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
appContext = applicationContext;
}
public static ApplicationContext getAppContext() {
return appContext;
}
}
注意:每個Worker都會初始化Spring上下文,因爲它運行在不同的JVM中。
UPDATE
如果你想使用中,你必須事先指定嘗試一些這方面的價值彈簧bean類,
注:傳遞當前類博爾特的構造
類(拓撲創建類),它已包含值:
public class StormTopologyClass implements ITopologyBuilder, Serializable {
public Map<String, String> attributes = new HashMap<String, String>();
TopologyBuilder builder=new TopologyBuilder();
builder.setBolt("Class1",new Class1(this));
builder.createTopology();
}
螺栓由我們荷蘭國際集團單參數的構造函數:
public class Class1 implements IRichBolt{
StormTopologyClass topology;
public Class1 (StormTopologyClass topology) {
this.topology = topology;
}
}
現在你可以使用屬性變量&它在螺栓類值。
你的意思是你想配置一個基於Spring的噴嘴/螺栓和屬性配置Storm?確切地說,是 – zenbeni
。我們在那裏使用spring-jms和其他一些東西,風暴使用的IOC模式和IOC模式彈簧使用的構建器模式有點不一致。如果能夠讓我們的代碼庫與我們其他的Java項目保持一致,那麼額外的XML將會引入這個命中,我很好。 – liam