繁体   English   中英

组件是否定义为延迟加载请求 scope?

[英]Is component defined with request scope lazy loaded?

组件定义了请求 scope,它提供基于HttpServletRequest object 的数据,如下所示。

@Component
@RequestScope
@Getter
public class RequestDataHolder {
  private final Object data;

  public RequestDataHolder(HttpServletRequest request) {
    data = //costly operations; 
  }
}

什么时候实例化组件? 我想在不需要数据时防止代价高昂的操作,所以考虑用@Lazy注释组件,但如果在默认访问时实例化它,注释将是多余的。

根据docs.spring.io

@RequestScope 是一个组合注解,作为 @Scope("request") 的快捷方式,默认的 proxyMode() 设置为 TARGET_CLASS。

这意味着当注入 singleton bean 时,请求作用域 bean 默认作为 CGLIB 代理提供。 代理实例化 bean 或重用现有 bean。

当调用其代理的方法时,bean 被实例化,这产生与@Lazy注释相同的效果。

当我们使用惰性初始化配置一个 bean 时,该 bean 只会在需要时创建,并注入其依赖项。 因此,当您将访问昂贵的数据时,只会调用此方法。 那么@Lazy 的使用就不会多余了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM