Ayo*_*b k 1 java spring dependency-injection spring-boot
我正在研究 Spring Boot Rest API,但最终还是在new
这里和那里使用了关键字。
我想知道,当我为我的程序使用 new 关键字时,我做错了什么。如果在实际项目中绝对禁止使用 new 关键字。
如果答案是肯定的,我应该用@component
注释来注释我写的每个类,以便我可以使用@autowired
.
如果答案是否定的,我们什么时候可以打破这条规则?
没有使用或不使用的规则new
。如果您想要 Spring 管理您的对象还是想要自己处理它们,这取决于您。Spring 简化了对象创建、依赖管理和自动装配;但是,new
如果您不想要的话,可以使用实例化它。
您可以在 spring 应用程序中使用 new 关键字创建对象。
但是这些对象将超出 Spring Application Context 的范围,因此不是 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));
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中/greeting
会工作但/greeting2
会失败,因为嵌套的依赖关系没有解析。
所以如果你想让你的对象被弹簧管理,那么你必须自动装配它们。一般来说,对于视图层 pojo 和自定义 bean 配置,您将使用new
关键字。
归档时间: |
|
查看次数: |
3016 次 |
最近记录: |