您可以在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
会失败,因为嵌套的依赖项无法解析。
因此,如果要对对象进行弹簧管理,则必须对其进行自动装配。一般来说,对于视图层pojos和自定义bean配置,您将使用new
关键字。