0
我的应用程序接收消息,提取数据并将提取的数据保存到数据库。数据通过Apache Camel通道接收,添加到FIFO中。以下代码从FIFO中接收下一条消息并对其进行处理。然而,为了做到这一点,需要从Spring应用程序上下文获得一个bean:如何避免从上下文中检索Spring托管bean
private static void dispatch(Message msg) {
if (msg == null) {
return;
}
// TODO: This really violates IoC.
DomainObjectFactory factory = (DomainObjectFactory) ApplicationContextProvider.getApplicationContext().getBean("domainObjectFactoryBean", DomainObjectFactory.class);
// do something with message
这是服务类:
@Service
public class ApplicationContextProvider implements ApplicationContextAware {
private static final Logger log = LoggerFactory.getLogger(ApplicationContextProvider.class);
private static ApplicationContext ctx = null;
public static ApplicationContext getApplicationContext() {
return getCtx();
}
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
log.debug("Loading context");
ApplicationContextProvider.setCtx(ctx);
}
public static ApplicationContext getCtx() {
return ctx;
}
public static void setCtx(ApplicationContext ctx) {
ApplicationContextProvider.ctx = ctx;
}
}
从FIFO读取消息:
void process(Object obj) {
Message msg = (Message) obj;
try {
Dispatcher.process(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
这真的是弱代码,但我不能解决如何避免它?那就是如何使用Spring IoC将消息从FIFO中移除到消息处理,而无需从上下文中检索bean。
任何意见/指导赞赏
注入豆到您的骆驼狂胜建设者或处理器或什么的。一切都停止使用静态方法。 –
好的 - 我对Ioc相当陌生。 1)静态方法有什么问题? (我想在这里学习)2)我不确定如何注入bean。我添加了从FIFO中读取的代码(该代码在与写入FIFO的Camel代码不同的线程中运行) – skyman