请解释 Spring 框架中 ObjectFactory 的作用与用法。
考察说明
考查对 Spring 延迟获取 Bean 机制的掌握程度。
回答思路
- 【回答框架 1】ObjectFactory 是 Spring 提供的一个泛型工厂接口,定义唯一方法 T getObject(),用于延迟获取指定类型的 Bean。
- 【回答框架 2】与直接注入 Bean 不同,ObjectFactory 在注入时不立即创建或查找 Bean,而是在调用 getObject() 时才触发依赖解析,从而避免循环依赖和减少初始化开销。
- 【回答框架 3】适用场景包括:需要多个候选 Bean、可选依赖、或延迟初始化以避免启动时的大量创建。Spring 内部在循环依赖处理中也常使用 ObjectFactory。
- 【回答框架 4】使用方式:在字段或构造器上直接注入 ObjectFactory<T>,Spring 容器会注入一个代理对象,调用 getObject() 时返回当前容器中对应的 Bean 实例。
- 【关键点 1】ObjectFactory 延迟获取 Bean,调用 getObject() 时才解析。
- 【关键点 2】可用于解决循环依赖和优化启动性能。
- 【关键点 3】注入 ObjectFactory 比注入具体 Bean 更灵活,支持运行时重新获取。
- 【易错点 1】误认为 ObjectFactory 会缓存 Bean 实例,实际上每次 getObject() 可能返回不同实例(视作用域而定)。
- 【易错点 2】混淆 ObjectFactory 与 ObjectProvider,后者是 Spring 5 增强版,提供流式 API 和可选处理。