Spring @Autowired vs 使用'new'关键字创建对象

Tus*_*har 4 java spring autowired

我正在学习 Spring 并构建一些实验应用程序。我对在哪里使用 @Autowired 创建对象感到困惑。

我得到了它促进松散耦合的部分,并且每次都创建一个新的对象,而不是'new'关键字所做的。

但是对于我们需要在我们的应用程序中使用的第三方对象,我们应该怎么做。例如,我正在使用一个休息 API,因为我需要初始化三个类,就像这样

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
restTemplate.exchange(url, HttpMethod.POST, entity, String.class); 
Run Code Online (Sandbox Code Playgroud)

这段代码正在为 RestTemplate、HttpHeaders 和 HttpEntity 创建新的对象。使用这段代码,每次我调用 rest API 时,它都会创建三个新对象。这是正确的方法还是我应该将它们标记为@Autowired。请详细说明。

m4k*_*tub 5

的典型用途@Autowire是在初始化 bean 时使用单例依赖项自动填充属性。无论是您的代码还是第三方类都无关紧要。您需要考虑它是否是程序逻辑的一部分,或者它是否真的是一个应该初始化一次并重用的依赖项。

如果您RestTemplate需要在每个之前进行相同的初始化,exchange那么您可以考虑@Autowire在 Spring 的配置中使用和初始化 bean。在这个意义上,它类似于 a DataSource,例如。但是,如果您将其视为用作程序逻辑一部分的实用程序类(如连接或文件),则不要将其视为@Autowire. 它会使您的程序更加复杂,而没有显着的收益。