如何延迟加载 spring bean?

How do I lazy load a spring bean?

所以,假设地说,如果我有一个对象,可以说这是一个我想从服务发回的异常响应,但只有在抛出异常时才会发回,因为我有另一种动物,如果一切正常,我就会发回美好的。我如何从 Spring... 获取它,但仅当我需要它时?换句话说,我如何避免注入我还不需要并且不能确定我会需要的对象?如何使用 Spring 进行延迟加载?

有两种可能:

  1. @Lazy 在 bean 定义上 + ObjectFactoryProvider 或在注入点上
  2. @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()第一次被调用时被实例化。