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

问题描述 投票:0回答:1

我有这个简单的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。有解决方案吗?

java spring spring-boot spring-mvc
1个回答
0
投票

构造函数用于创建对象。您说:“通过构造函数在此处发送args”-但这意味着您应为每个请求create类型为BinCountryCheckerFilterImpl的新对象,而这不是该类的定义方式。

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

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

@Service
public class BinCountryCheckFilterImpl {

  @Autowired
  private RiskFilterService riskFilterService;

  public void validateBinCountryCheckFilter(Terminals terminal) {

  }
}

如果确实需要将BinCountryCheckFilterImpl定义为原型,则应注意不能通过简单的自动装配将原型注入单例。

有很多技术可以找到答案here。我没有在答案中描述它们,因为我认为这超出了问题的范围,您应该真正使用上面提供的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.