在我的一个课程中,我想在myClosure = { [weak self, unowned bar] in
self?.foo(bar)
}
和RetryTemplate
中使用具有特定参数的弹簧课SimpleRetryPolicy
。 FixedBackOffPolicy
不是bean,我想到两个选项:
更普遍的问题是:我是否应该在配置文件中创建一个对象,只有在创建它时才使用具有特定参数的特定类?
答案 0 :(得分:1)
只需使用new()旧时尚的方式。如果你不共享不同类之间的实例,而你的这个类不是“服务”或类似的那样,那么通过spring注入它是没有意义的。
另一个(大)差异是,如果你默认使它成为一个bean弹簧使它成为单例并将同一个实例注入需要它的不同组件中。如果这不是必需的行为,那么您不需要使用该机制。我们仍在使用java进行编码,因此创建所需的对象没有任何问题。
答案 1 :(得分:0)
我会用它作为bean。为什么?因为它更容易测试你的服务,你可以根据需要模拟这个RetryTemplate
bean,甚至,如果你使用带有上下文的测试,你可以定义测试bean,它将替换你的真实测试用于测试。
它与spring-boot中RestTemplate
和TestRestTemplate
的方法相同,当你运行测试时,spring会自动创建bean TestRestTemplate
,这是{{1}的实现扩展它并预先配置,以便更容易测试您的客户端服务。
仅使用RestTemplate
,如果需要,就很难嘲笑它。
或者将来您可能希望添加另一个new
并使用配置文件在它们之间切换,具体取决于您运行应用程序的环境。
此外,您似乎并不希望为每个将使用它的服务创建RetryStrategy
的新副本,默认情况下,bean是singleton,这意味着它将使用相同的实例(但是它可以更改为每个服务创建新实例,如果需要,可以自动装配。)
总体而言,使用bean而不是在yuor服务中创建实体对于将来的扩展和测试更加灵活。