我有这个简单的Spring Service:
@Service
public class BinCountryCheckFilterImpl {
@Autowired
private RiskFilterService riskFilterService;
private Terminals terminal;
@Autowired
public BinCountryCheckFilterImpl(Terminals terminal) {
this.terminal = terminal;
}
}
Terminals
是每个收到的请求唯一的对象。同样,binCountryCheckFilter
对于每个请求都应该是唯一的-它应该检查数据以了解某些业务状况。
我想从这里致电服务:
@Service
public class FilterProcessing {
@Autowired
private BinCountryCheckFilterImpl binCountryCheckFilter;
public Response someMetohd(Terminals terminal,
Transaction message, HttpServletRequest request) throws JAXBException, JsonProcessingException {
switch(.......) {
case ".......":
// send here the args via Contructor
binCountryCheckFilter.validateBinCountryCheckFilter(terminal);
break;
case ".........":
.........
break;
break;
}
}
return null;
}
}
但是我不知道如何通过terminal
构造函数发送对象BinCountryCheckFilterImpl
。有解决方案吗?
构造函数用于创建对象。您说:“通过构造函数在此处发送args”-但这意味着您应为每个请求create类型为BinCountryCheckerFilterImpl
的新对象,而这不是该类的定义方式。
在您的情况下,BinCountryCheckFilterImpl
是具有(默认)作用域单例的Bean,这意味着在应用程序上下文中仅存在此类的一个实例。
因此,不要在构造函数中使用参数,只需将Terminals
对象(根据请求创建)传递给验证方法:
@Service
public class BinCountryCheckFilterImpl {
@Autowired
private RiskFilterService riskFilterService;
public void validateBinCountryCheckFilter(Terminals terminal) {
}
}
如果确实需要将BinCountryCheckFilterImpl
定义为原型,则应注意不能通过简单的自动装配将原型注入单例。
有很多技术可以找到答案here。我没有在答案中描述它们,因为我认为这超出了问题的范围,您应该真正使用上面提供的解决方案。