问题描述
我正在使用jpos
库进行事务管理(Spring启动项目)。我正在实施ISORequestListener
,如下所示。
@Component
public class MyRequestListner implements ISORequestListener,Configurable {
protected String var1;
protected String var2;
@Override
public void setConfiguration(Configuration cfg) throws ConfigurationException {
var1 = cfg.get("var1");
var2 = cfg.get("var2");
}
@Override
public boolean process(ISOSource source,ISOMsg m) {
Context ctx = new Context();
ctx.put("ctx1",var1);
ctx.put("ctx2",var2);
return true;
}
}
在运行SonarQube
(代码分析工具)时,出现以下错误消息:
用“ @Autowired”,“ @ Resource”,“ @ Inject”或“ @Value”注释全局变量,或者不要在Spring @ Component,@ Controller,@ Service和@Repository类上使用。 / p>
Spring @ Component,@ Controller,@ Service和@Repository类默认为单例,这意味着在应用程序中仅实例化了该类的一个实例。
这样的类可能有一些静态成员,例如logger,但是所有非静态成员都应该由Spring管理。也就是说,它们应具有以下注释之一:@ Resource,@ Inject,@ Autowired或@Value。
这是否会导致任何并发问题(或线程问题)或由jpos
内部处理?如果确实引起问题的话,正确的实现方法是什么?
解决方法
如果在jPOS自己的Q2微内核中运行jPOS,则没有问题。如果不是这种情况,恐怕您通常只能靠自己了。在Q2中运行非常简单,它是一个单一的衬里:new Q2().start();
,您可以从任何其他框架运行,然后让Q2配置您的jPOS组件。