@Value在Controller中取值
一、使用
@Value("${name}")註解可以獲取自定義的properties檔案中的name值
二、配置
如果只是在applicationcontext.xml中配置,那麼在service中獲取,沒有任何問題,但是在controller中是獲取取到值的,如果想獲取到值,需要在spring-servlet.xml中再配置一遍
1 2 3 4 5 6 7 8 9 10 |
= "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
|
三、原因
applicationcontext.xml 中定義的上下文稱根上下文,即WebApplicationContext,這是一個介面類,確切的說,其實際的實現類是XmlWebApplicationContext。這個就是spring的IoC容器,其對應的Bean定義的配置由web.xml中的context-param標籤指定。
contextLoaderListener監聽器初始化完畢後,開始初始化web.xml中配置的Servlet,這個servlet可以配置多個,以最常見的DispatcherServlet為例,這個servlet實際上是一個標準的前端控制器,用以轉發、匹配、處理每個servlet請求。DispatcherServlet上下文在初始化的時候會建立自己的IoC上下文,用以持有springmvc相關的bean,每個servlet就持有自己的上下文,即擁有自己獨立的bean空間,同時各個servlet共享根上下文中定義的bean,可以通過id直接引用applicationcontext.xml 中定義的bean。
controller的定義在springmvc-servlet.xml定義的上下文中,所以在Controller中使用@Value來獲取properties中的name值時,只會在servlet的上下文中查詢,如果不在springmvc-servlet.xml配置,肯定是找不到的。
白首為功名。 舊山松竹老,阻歸程。 將欲心事付瑤箏。 知音少,絃斷有誰聽? 紙上得來終覺淺,絕知此事要躬行。