gpt4 book ai didi

java - 我不应该在 Spring Boot 项目中使用 'new' 关键字吗?

转载 作者:行者123 更新时间:2023-12-01 06:49:08 25 4
gpt4 key购买 nike

我正在研究 Spring Boot Rest API,最终我确实到处使用了 new 关键字。

我想知道,当我在程序中使用 new 关键字时,我是否做错了什么?而如果在实际项目中绝对禁止使用new关键字。

如果答案是肯定的,我应该用 @component 注释来注释我编写的每个类,以便我可以使用 @autowired 实例化一个对象。

如果答案是否定的,我们什么时候可以打破这个规则?

最佳答案

您可以在 Spring 应用程序中使用 new 关键字创建对象。

但是这些对象将超出 Spring 应用程序上下文的范围,因此不受 Spring 管理。

由于这些不是 spring 管理的,因此任何嵌套的依赖级别(例如您的 Service 类引用了您的 Repository 类等)不会得到解决。

因此,如果您尝试调用服务类中的方法,您最终可能会得到存储库的 NullPointer。

@Service
public class GreetingService {
@Autowired
private GreetingRepository greetingRepository;
public String greet(String userid) {
return greetingRepository.greet(userid);
}
}

@RestController
public class GreetingController {
@Autowired
private GreetingService greetingService;
@RequestMapping("/greeting")
public String greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s", greetingService.greet(name));
}
@RequestMapping("/greeting2")
public String greeting2(@RequestParam(value = "name", defaultValue = "World") String name) {
GreetingService newGreetingService = new GreetingService();
return String.format("Hello %s", newGreetingService.greet(name));
}
}

在上面的示例中,/greeting 将起作用,但 /greeting2 将失败,因为嵌套依赖项未解析。

因此,如果您希望对象由 spring 管理,那么您必须 Autowiring 它们。一般来说,对于 View 层 pojo 和自定义 bean 配置,您将使用 new 关键字。

关于java - 我不应该在 Spring Boot 项目中使用 'new' 关键字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52267478/

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