2010-11-11 52 views
1

我想知道是否有方法來加載彈簧應用程序上下文,而無需在web.xml中定義它。在不使用web.xml的情況下加載應用程序上下文

我看你可以使用:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

但是,如果你想使用你必須的getBean豆()能夠訪問它。我想可能有一種方法可以像web xml中的定義一樣以編程方式加載上下文,而無需調用getBean。

任何想法?

回答

0

有一種方法。你只需要閱讀官方文檔。相關部分是here

編輯:抱歉,誤讀了您的問題。您可以使用

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

並在應用程序啓動時使用ServletContextListener加載它。當你的應用程序啓動時,如果你已經正確配置了你的bean配線,你不應該調用getBean()來訪問你所有的bean。像對待Java SE一樣對待它。

+0

我沒有看到任何可以工作*的部分,而無需在web.xml中定義它* – 2010-11-11 09:43:56

+0

您的意思是我需要的是ServletContextListener中的ClassPathXmlApplicationContext實例,它會爲我完成剩下的工作嗎? – Bitmap 2010-11-11 10:08:31

+0

@Bitmap:差不多。您仍然需要將** getBean()**用於佈線層次結構中的「頂級」bean。規則是:如果您使用「new」關鍵字創建bean,則不會使用Spring連線。如果你爲應用程序製作一個靜態公共getter。 ServletContextListener中的上下文,你可以在需要的時候毫不費力地獲得你的bean。 – darioo 2010-11-11 10:10:19

1

您可以使用:

ctx.getAutowireCapableBeanFactory().autowireBeanProperties(this, 
        AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);   

...其中CTX是你的ClassPathXmlApplicationContext以避免需要調用過的getBean() - 上this任何Spring bean字段將被裝配爲您服務。

相關問題