自动装配或新的RetryTemplate

时间:2018-05-02 07:45:31

标签: java spring

在我的一个课程中,我想在myClosure = { [weak self, unowned bar] in self?.foo(bar) } RetryTemplate中使用具有特定参数的弹簧课SimpleRetryPolicyFixedBackOffPolicy不是bean,我想到两个选项:

  1. 在我的班级中,使用new()创建它,就像旧式一样,没有任何Autowired。
  2. 在配置文件中以Bean形式创建它并进行自动连接。
  3. 更普遍的问题是:我是否应该在配置文件中创建一个对象,只有在创建它时才使用具有特定参数的特定类?

2 个答案:

答案 0 :(得分:1)

只需使用new()旧时尚的方式。如果你不共享不同类之间的实例,而你的这个类不是“服务”或类似的那样,那么通过spring注入它是没有意义的。

另一个(大)差异是,如果你默认使它成为一个bean弹簧使它成为单例并将同一个实例注入需要它的不同组件中。如果这不是必需的行为,那么您不需要使用该机制。我们仍在使用java进行编码,因此创建所需的对象没有任何问题。

答案 1 :(得分:0)

我会用它作为bean。为什么?因为它更容易测试你的服务,你可以根据需要模拟这个RetryTemplate bean,甚至,如果你使用带有上下文的测试,你可以定义测试bean,它将替换你的真实测试用于测试。

它与spring-boot中RestTemplateTestRestTemplate的方法相同,当你运行测试时,spring会自动创建bean TestRestTemplate,这是{{1}的实现扩展它并预先配置,以便更容易测试您的客户端服务。

仅使用RestTemplate,如果需要,就很难嘲笑它。

或者将来您可能希望添加另一个new并使用配置文件在它们之间切换,具体取决于您运行应用程序的环境。

此外,您似乎并不希望为每个将使用它的服务创建RetryStrategy的新副本,默认情况下,bean是singleton,这意味着它将使用相同的实例(但是它可以更改为每个服务创建新实例,如果需要,可以自动装配。)

总体而言,使用bean而不是在yuor服务中创建实体对于将来的扩展和测试更加灵活。