组件是用请求范围定义的,它提供基于请求的数据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(使用前将#替换为@)