如何延迟加载 spring bean?
How do I lazy load a spring bean?
所以,假设地说,如果我有一个对象,可以说这是一个我想从服务发回的异常响应,但只有在抛出异常时才会发回,因为我有另一种动物,如果一切正常,我就会发回美好的。我如何从 Spring... 获取它,但仅当我需要它时?换句话说,我如何避免注入我还不需要并且不能确定我会需要的对象?如何使用 Spring 进行延迟加载?
有两种可能:
@Lazy
在 bean 定义上 + ObjectFactory
或 Provider
或在注入点上
@Lazy
关于 bean 定义 + @Lazy
关于注入点
示例 #2
@Service
@Lazy
class LazyService {
LazyService() {
System.out.println("service");
}
String bar() {
System.out.println("bar");
return "bar";
}
}
@RestController
class Controller {
private final LazyService service;
Controller(@Lazy LazyService service) {
this.service = service;
System.out.println("controller");
}
@GetMapping("/")
String foo() {
System.out.println("foo");
return service.bar();
}
}
LazyService
在方法Controller.foo()
第一次被调用时被实例化。
所以,假设地说,如果我有一个对象,可以说这是一个我想从服务发回的异常响应,但只有在抛出异常时才会发回,因为我有另一种动物,如果一切正常,我就会发回美好的。我如何从 Spring... 获取它,但仅当我需要它时?换句话说,我如何避免注入我还不需要并且不能确定我会需要的对象?如何使用 Spring 进行延迟加载?
有两种可能:
@Lazy
在 bean 定义上 +ObjectFactory
或Provider
或在注入点上@Lazy
关于 bean 定义 +@Lazy
关于注入点
示例 #2
@Service
@Lazy
class LazyService {
LazyService() {
System.out.println("service");
}
String bar() {
System.out.println("bar");
return "bar";
}
}
@RestController
class Controller {
private final LazyService service;
Controller(@Lazy LazyService service) {
this.service = service;
System.out.println("controller");
}
@GetMapping("/")
String foo() {
System.out.println("foo");
return service.bar();
}
}
LazyService
在方法Controller.foo()
第一次被调用时被实例化。