Spring web應(yīng)用下方便的獲得bean(轉(zhuǎn))
Posted on 2009-01-06 13:27 析木 閱讀(1111) 評(píng)論(0) 編輯 收藏 所屬分類: Spring 如果我們的系統(tǒng)不是分布式的(在分布式里,我一般自己加載spring的配置文件),不是一般的application,通過自己加載Spring的配置文件的方式。而是一般的web應(yīng)用,我們通過在web.xml里配置spring的配置文件。我們?cè)趺捶奖愕牡玫揭粋€(gè)Bean的實(shí)例呢?當(dāng)然,web應(yīng)用啟動(dòng)后,它已經(jīng)創(chuàng)建好一個(gè)WebApplicationContext(這個(gè)是接口,其實(shí)也是ApplicationContext類型的,因?yàn)閃ebApplicationContext繼承自ApplictionContext這個(gè)接口)類型的實(shí)例對(duì)象,通過org.springframework.web.context.support.WebApplicationContextUtils里的
getWebApplicationContext(ServletContext sc)可以得到這個(gè)對(duì)象的引用(這個(gè)就像我們一般的java application下得到ApplicationContext類型的引用一樣),我們就可以通過它的getBean方法得到我們的bean實(shí)例了。但是這里有個(gè)問題getWebApplicationContext(ServletContext sc)這個(gè)方法的參數(shù)ServletContext代表的是你web應(yīng)用的環(huán)境,也就是說,也就是說web應(yīng)用環(huán)境下特有的。這個(gè)時(shí)候如果你想得到一個(gè)bean的話,必須要有這個(gè)ServletContext對(duì)象存在,如果你每個(gè)類里都寫一個(gè)方法來接受ServletContext對(duì)象,從而得到WebApplicationContext類型實(shí)例的引用,之后再得到bean,進(jìn)行你要的操作,這個(gè)是不是很麻煩?這個(gè)不是要寫很多代碼么?我覺得可以把獲得bean的這個(gè)操作的功能代碼放在一個(gè)Servlet里,讓這個(gè)Servlet在web應(yīng)用啟動(dòng)的時(shí)候加載,我們之后把這個(gè)Servlet當(dāng)作普通類使用,調(diào)用里面的getBean方法就可以了。這個(gè)servlet的代碼如下:






















web.xml配置里:

































紅色也可以為:





使用示例:
假使我有一個(gè)Person的類,屬性有name和age,在spring配置文件里配置的id為“person”
你在你的servlet或者jsp想得到這個(gè)實(shí)例的時(shí)候,直接這么做就可以了:
Person person=(Person)GetBeanServlet.getBean("person");