一、這個接口有什麼用?
當一個類實作了這個接口(applicationcontextaware)之後,這個類就可以友善獲得applicationcontext中的所有bean。換句話說,就是這個類可以直接擷取spring配置檔案中,所有有引用到的bean對象。
二、怎麼用?
舉個例子吧:
例如我有一個方法類apputil,這個方法類中需要使用到的applicationcontext中的某個bean(companyservice)。
1、因為spring要建立屬于自己的容器,就必須要加載自己的配置檔案。
這個時候,需要注冊contextloaderlistener或者這個類的子類。
在web.xml加上以下的資訊:
1
<code><</code><code>p</code> <code>style</code><code>=</code><code>"line-height: normal;"</code><code>><</code><code>listener</code><code>><</code><code>br</code><code>> <</code><code>listener-class</code><code>>org.springframework.web.context.contextloaderlistener</</code><code>listener-class</code><code>><</code><code>br</code><code>> </</code><code>listener</code><code>><</code><code>br</code><code>></</code><code>p</code><code>></code>
當然,這樣子的話隻會讀取預設路徑下的application.xml配置檔案的。如果需要讀取特定路徑下的配置檔案。需要在web.xml中
添加如下資訊。可以參考我的示例,指定配置檔案,如下:
<code><</code><code>p</code> <code>style</code><code>=</code><code>"line-height: normal;"</code><code>><</code><code>context-param</code><code>><</code><code>br</code><code>> <</code><code>param-name</code><code>>contextconfiglocation</</code><code>param-name</code><code>><</code><code>br</code><code>> <</code><code>param-value</code><code>>classpath:conf/app-context.xml</</code><code>param-value</code><code>><</code><code>br</code><code>> </</code><code>context-param</code><code>><</code><code>br</code><code>></</code><code>p</code><code>></code>
注意:
<code><</code><code>p</code> <code>style</code><code>=</code><code>"line-height: normal;"</code><code>><</code><code>param-name</code><code>>contextconfiglocation</</code><code>param-name</code><code>><</code><code>br</code><code>></</code><code>p</code><code>></code>
是不能改變的。
2、方法類apputil的處理
方法類apputil實作applicationcontextaware接口:
<code><p style=</code><code>"line-height: normal;"</code><code>></code><code>public</code> <code>class</code> <code>apputil<br> </code><code>implements</code> <code>applicationcontextaware<br></p></code>
為方法類apputil增加一個靜态的成員applicationcontext類型的對象。以後方法類apputil擷取applicationcontext,就是通過讀取這個
成員變量的。具體如下所示:
<code><p style=</code><code>"line-height: normal;"</code><code>></code><code>private</code> <code>static</code> <code>applicationcontext appcontext;<br></p></code>
實作applicationcontextaware接口的預設方法:
<code><p style=</code><code>"line-height: normal;"</code><code>> </code><code>public</code> <code>void</code> <code>setapplicationcontext(applicationcontext paramapplicationcontext)<br> </code><code>throws</code> <code>beansexception<br> {<br> appcontext = paramapplicationcontext;<br> }<br></p></code>
3、在spring的配置檔案中,注冊方法類apputil
嚴格上來說,方法類apputil是一個bean,而且從步驟2中我們不難發現,之是以方法類apputil能夠靈活自如地擷取applicationcontext
就是因為spring能夠為我們自動地執行了setapplicationcontext。但是,spring不會無緣無故地為某個類執行它的方法的,是以,就很有必要通過注冊方法類apputil的方式告知spring有這樣子一個類的存在。
其實,方法很簡單,就是将方法類apputil作為一個普通的bean在spring的配置檔案中進行注冊:
<code><</code><code>p</code> <code>style</code><code>=</code><code>"line-height: normal;"</code><code>><</code><code>bean</code> <code>id</code><code>=</code><code>"apputil"</code> <code>class</code><code>=</code><code>"com.htsoft.core.util.apputil"</code><code>/><</code><code>br</code><code>></</code><code>p</code><code>></code>
4、使用靜态的成員applicationcontext類型的對象,appcontext,來調用其他bean。在方法類apputil中增加如下方法:
<code><p style=</code><code>"line-height: normal;"</code><code>></code><code>public</code> <code>static</code> <code>object getbean(string paramstring)<br> {<br> </code><code>return</code> <code>appcontext.getbean(paramstring);<br> }<br></p></code>
那麼,在方法類apputil中就能夠靈活地調用其他任何一個bean了,例如:
<code><p style=</code><code>"line-height: normal;"</code><code>>companyservice localcompanyservice = (companyservice)getbean(</code><code>"companyservice"</code><code>);<br></p></code>
注:配置檔案中關于companyservice的内容:
<code><</code><code>p</code> <code>style</code><code>=</code><code>"line-height: normal;"</code><code>><</code><code>bean</code> <code>id</code><code>=</code><code>"companyservice"</code> <code>class</code><code>=</code><code>"com.kaiwii.service.system.impl.companyserviceimpl"</code><code>><</code><code>br</code><code>> <</code><code>constructor-arg</code> <code>index</code><code>=</code><code>"0"</code> <code>ref</code><code>=</code><code>"companydao"</code><code>/> <</code><code>br</code><code>></</code><code>bean</code><code>><</code><code>br</code><code>></</code><code>p</code><code>></code>
特别說明:尊重作者的勞動成果,轉載請注明出處哦~~~
http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt379