gpt4 book ai didi

java - 调用 Spring 服务并通过构造函数发送参数

转载 作者:行者123 更新时间:2023-12-01 21:48:22 25 4
gpt4 key购买 nike

我有这个简单的 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;
}
}

但我不知道如何通过 BinCountryCheckFilterImpl 构造函数发送对象terminal。有什么解决办法吗?

最佳答案

构造函数的作用是创建对象。你说:“通过构造函数向这里发送参数” - 但这意味着你应该为每个请求创建类型为BinCountryCheckerFilterImpl的新对象,而这不是该类的方式已定义。

在您的情况下,BinCountryCheckFilterImpl 是一个具有(默认)范围单例的 bean,这意味着应用程序上下文中仅存在该类的一个实例。

因此,不要在构造函数中使用参数,只需将 Terminals 对象(根据请求创建)传递到验证方法中即可:

@Service
public class BinCountryCheckFilterImpl {

@Autowired
private RiskFilterService riskFilterService;

public void validateBinCountryCheckFilter(Terminals terminal) {

}
}

如果您确实必须将 BinCountryCheckFilterImpl 定义为原型(prototype),您应该意识到原型(prototype)不能通过简单的 Autowiring 注入(inject)到单例中。

这方面的技巧有很多,你可以找到答案here 。我没有在答案中描述它们,因为我觉得它超出了问题的范围,您确实应该采用我上面提供的解决方案。

关于java - 调用 Spring 服务并通过构造函数发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58772312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com