详解Spring Controller autowired Request变量

spring的DI大家比较熟悉了,对于依赖注入的实现也无须赘述。
那么spring的bean的默认scope为singleton,对于controller来说每次方法中均可以获得request还是比较有意思的。
对于方法参数上的request通过构建方法的参数可以获得最新的request
public final Object invokeForRequest(NativeWebRequest request, ModelAndViewContainer mavContainer,
Object... providedArgs) throws Exception {
Object[] args = getMethodArgumentValues(request, mavContainer, providedArgs);
if (logger.isTraceEnabled()) {
StringBuilder sb = new StringBuilder("Invoking [");
sb.append(getBeanType().getSimpleName()).append(".");
sb.append(getMethod().getName()).append("] method with arguments ");
sb.append(Arrays.asList(args));
logger.trace(sb.toString());
}
Object returnValue = invoke(args);
if (logger.isTraceEnabled()) {
logger.trace("Method [" + getMethod().getName() + "] returned [" + returnValue + "]");
}
return returnValue;
}
2. 对于controller等单实例变量来说如何动态注入变量呢?spring使用了很聪明的办法
/**
* Register web-specific scopes ("request", "session", "globalSession", "application")
* with the given BeanFactory, as used by the WebApplicationContext.
* @param beanFactory the BeanFactory to configure
* @param sc the ServletContext that we're running within
*/
public static void registerWebApplicationScopes(ConfigurableListableBeanFactory beanFactory, ServletContext sc) {
beanFactory.registerScope(WebApplicationContext.SCOPE_REQUEST, new RequestScope());
beanFactory.registerScope(WebApplicationContext.SCOPE_SESSION, new SessionScope(false));
beanFactory.registerScope(WebApplicationContext.SCOPE_GLOBAL_SESSION, new SessionScope(true));
if (sc != null) {
ServletContextScope appScope = new ServletContextScope(sc);
beanFactory.registerScope(WebApplicationContext.SCOPE_APPLICATION, appScope);
// Register as ServletContext attribute, for ContextCleanupListener to detect it.
sc.setAttribute(ServletContextScope.class.getName(), appScope);
}
beanFactory.registerResolvableDependency(ServletRequest.class, new RequestObjectFactory());
beanFactory.registerResolvableDependency(HttpSession.class, new SessionObjectFactory());
beanFactory.registerResolvableDependency(WebRequest.class, new WebRequestObjectFactory());
if (jsfPresent) {
FacesDependencyRegistrar.registerFacesDependencies(beanFactory);
}
}
/**
* Factory that exposes the current request object on demand.
*/
@SuppressWarnings("serial")
private static class RequestObjectFactory implements ObjectFactory<ServletRequest>, Serializable {
public ServletRequest getObject() {
return currentRequestAttributes().getRequest();
}
@Override
public String toString() {
return "Current HttpServletRequest";
}
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Spring
# Controller
# autowired
# Request变量
# Request变量的实例详解
# 如何在springMVC的controller中获取request
# 关于Spring MVC在Controller层中注入request的坑详解
# Spring实现在非controller中获取request对象
# 可以获得
# 是在
# 如有
# 希望能
# 谢谢大家
# 很聪明
# 存了
# 疑问请
# 中均
# 有意思
# 使用了
# arguments
# method
# getName
# asList
# Arrays
# trace
# getMethod
# Invoking
# sb
相关文章:
网站制作需要会哪些技术,建立一个网站要花费多少?
焦点电影公司作品,电影焦点结局是什么?
建站三合一如何选?哪家性价比更高?
大型企业网站制作流程,做网站需要注册公司吗?
黑客如何利用漏洞与弱口令入侵网站服务器?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
浅析上传头像示例及其注意事项
建站之星多图banner生成与模板自定义指南
网页设计网站制作软件,microsoft office哪个可以创建网页?
建站之星上传入口如何快速找到?
如何通过宝塔面板实现本地网站访问?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
如何快速生成专业多端适配建站电话?
如何用低价快速搭建高质量网站?
长沙企业网站制作哪家好,长沙水业集团官方网站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
如何选择靠谱的建站公司加盟品牌?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
IOS倒计时设置UIButton标题title的抖动问题
建站主机服务器选型指南与性能优化方案解析
网站制作企业,网站的banner和导航栏是指什么?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
自助网站制作软件,个人如何自助建网站?
建站之星备案流程有哪些注意事项?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
宝塔新建站点报错如何解决?
如何确保西部建站助手FTP传输的安全性?
已有域名如何快速搭建专属网站?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
建站168自助建站系统:快速模板定制与SEO优化指南
建站之星如何实现PC+手机+微信网站五合一建站?
北京制作网站的公司,北京铁路集团官方网站?
表情包在线制作网站免费,表情包怎么弄?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何选择适配移动端的WAP自助建站平台?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何打造高效商业网站?建站目的决定转化率
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
建站之星好吗?新手能否轻松上手建站?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
如何通过商城免费建站系统源码自定义网站主题?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
C++如何编写函数模板?(泛型编程入门)
建站主机SSH密钥生成步骤及常见问题解答?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
香港服务器如何优化才能显著提升网站加载速度?
南平网站制作公司,2025年南平市事业单位报名时间?
C#怎么使用委托和事件 C# delegate与event编程方法
*请认真填写需求信息,我们会在24小时内与您取得联系。