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

2024-05-03

组件是用请求范围定义的,它提供基于请求的数据HttpServletRequest对象如下图所示。

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

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

组件什么时候实例化?我想在不需要数据时防止昂贵的操作,因此正在考虑使用注释组件@Lazy,但如果默认访问时实例化,则注释将是多余的。


根据文档.spring.io https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/context/annotation/RequestScope.html:

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

这意味着当注入到单例 bean 中时,请求作用域 bean 默认情况下作为 CGLIB 代理提供。代理要么实例化 Bean,要么重用现有的 Bean。

当调用它的代理方法时,bean 就会被实例化,这会产生与@Lazy注解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

组件是否定义为请求范围延迟加载? 的相关文章

随机推荐