我不应该在 Spring Boot 项目中使用“new”关键字吗?

2024-05-07

我正在研究 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 管理,那么您必须自动装配它们。 一般来说,对于视图层 pojo 和自定义 bean 配置,您将使用new关键词。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我不应该在 Spring Boot 项目中使用“new”关键字吗? 的相关文章

随机推荐