我有这个简单的Spring服务:
@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
。
有解决方案吗?
答案 0 :(得分:0)
构造函数用于创建对象。
您说:“通过构造函数在此处发送args”-但这意味着您应该为每个请求创建类型为public static IServiceCollection AddRange(this IServiceCollection current, IServiceCollection main)
{
if(current == null)
{
throw ArgumentNullException();
}
foreach (var serv in main)
{
current.Add(serv);
}
return current;
}
的新对象,而这并不是该类的定义方式。
在您的情况下,BinCountryCheckerFilterImpl
是具有(默认)作用域单例的bean,这意味着在应用程序上下文中仅存在此类的一个实例。
因此,不要在构造函数中使用参数,只需将BinCountryCheckFilterImpl
对象(根据请求创建)传递给验证方法即可:
Terminals
如果确实必须将@Service
public class BinCountryCheckFilterImpl {
@Autowired
private RiskFilterService riskFilterService;
public void validateBinCountryCheckFilter(Terminals terminal) {
}
}
定义为原型,则应注意不能通过简单的自动装配将原型注入单例。
对此有很多技巧,您可以找到答案here。我没有在答案中描述它们,因为我认为它超出了问题的范围,您应该真正使用上面提供的解决方案。