您可以在 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));
}
}
在上面的例子中,/greeting 可以工作,但/greeting2 会失败,因为嵌套的依赖关系没有被解析。
因此,如果您希望您的对象由弹簧管理,那么您必须自动装配它们。
一般来说,对于视图层 pojo 和自定义 bean 配置,您将使用 new 关键字。