springmvc中获取request对象,加载biz(service)的方法
獲取request對象:
首先配置web.xml文件-->
?
[html]?view plaincopy
然后在程序中獲取:
?
代碼:
?
[java]?view plaincopy?
在Controller中獲取biz很簡單,注解配置都行,一般用注解,@Autowired就搞定了,可是有時在普通java類中想獲取到biz很麻煩,所以可以用下面的方式加載。
在普通類中加載biz,用SpringApplicationContext.getBean(xx.class);
?
?
代碼:
?
[java]?view plaincopy?
版本二
利用Spring隨時隨地獲得Request和Session
一、準(zhǔn)備工作:
在web.xml中添加??
?
<listener> <listener-class> org.springframework.web.context.request.RequestContextListener</listener-class> </listener>
?
?
?
二、使用方法:?
1、方法一:通過代碼實現(xiàn)?
2、方法二:通過注解實現(xiàn):?
?
?
@Autowired private HttpServletRequest request;三、關(guān)于RequestContextListener的背景知識: 基于LocalThread將HTTP request對象綁定到為該請求提供服務(wù)的線程上。這使得具有request和session作用域的bean能夠在后面的調(diào)用鏈中被訪問到。??
Request作用域??
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>??
針對每次HTTP請求,Spring容器會根據(jù)loginAction bean定義創(chuàng)建一個全新的LoginAction bean實例,且該loginAction bean實例僅在當(dāng)前HTTP request內(nèi)有效,因此可以根據(jù)需要放心的更改所建實例的內(nèi)部狀態(tài),而其他請求中根據(jù)loginAction bean定義創(chuàng)建的實例,將不會看到這些特定于某個請求的狀態(tài)變化。當(dāng)處理請求結(jié)束,request作用域的bean實例將被銷毀。??
Session作用域??
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>??
針對某個HTTP Session,Spring容器會根據(jù)userPreferences bean定義創(chuàng)建一個全新的userPreferences bean實例,且該userPreferences bean僅在當(dāng)前HTTP Session內(nèi)有效。與request作用域一樣,你可以根據(jù)需要放心的更改所創(chuàng)建實例的內(nèi)部狀態(tài),而別的HTTP Session中根據(jù)userPreferences創(chuàng)建的實例,將不會看到這些特定于某個HTTP Session的狀態(tài)變化。當(dāng)HTTP Session最終被廢棄的時候,在該HTTP Session作用域內(nèi)的bean也會被廢棄掉。??
global session作用域??
<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>??
global session作用域類似于標(biāo)準(zhǔn)的HTTP Session作用域,不過它僅僅在基于portlet的web應(yīng)用中才有意義。Portlet規(guī)范定義了全局Session的概念,它被所有構(gòu)成某個portlet web應(yīng)用的各種不同的portlet所共享。在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內(nèi)。??
請注意,假如你在編寫一個標(biāo)準(zhǔn)的基于Servlet的web應(yīng)用,并且定義了一個或多個具有g(shù)lobal session作用域的bean,系統(tǒng)會使用標(biāo)準(zhǔn)的HTTP Session作用域,并且不會引起任何錯誤??
二、為什么需要額外的配置RequestContextFilter??
也許會有一個疑問,已經(jīng)通過ContextLoaderListener(或ContextLoaderServlet)將Web容器與Spring容器整合,為什么這里還要用額外的RequestContextListener以支持Bean的另外3個作用域,原因是ContextLoaderListener實現(xiàn)ServletContextListener監(jiān)聽器接口,而ServletContextListener只負(fù)責(zé)監(jiān)聽Web容器的啟動和關(guān)閉的事件。RequestContextFilter實現(xiàn)ServletRequestListener監(jiān)聽器接口,該監(jiān)聽器監(jiān)聽HTTP請求事件,Web服務(wù)器接收的每次請求都會通知該監(jiān)聽器。通過配置RequestContextFilter,Spring容器與Web容器結(jié)合的更加密切。??
三、作用域依賴問題??
如果將Web相關(guān)作用域的Bean注入到singleton或prototype的Bean中,這種情況下,需要Spring AOP
<bean?name="car"?class="com.demo.Car"?scope="request">??
????<aop:scoped-proxy/>??
</bean>??
<bean?id="boss"?class="com.demo.Boss"?>??
???<properrty?name="car"?ref="car"?/>??
</bean>??
?
轉(zhuǎn)載于:https://www.cnblogs.com/Jeely/p/10811949.html
總結(jié)
以上是生活随笔為你收集整理的springmvc中获取request对象,加载biz(service)的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《如何高效学习》
- 下一篇: java之spring mvc之初始sp