我正在研究 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(使用前将#替换为@)