2014-01-24 79 views
1

我正在將一個grails應用程序轉換爲spring。如何從spring 'WEB-INF/applicationContext.xml'獲取groovy或java類中的spring bean。從Groovy類中的應用程序上下文獲取spring bean

這是我使用的Grails應用程序的代碼

queueConnectionFactory = (QueueConnectionFactory)Holders.applicationContext.getBean("jmsConnectionFactory"); 

我已經試過

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 
queueConnectionFactory usa = (QueueConnectionFactory) ctx.getBean("jmsConnectionFactory"); 

,但它沒有工作,我得到了一個錯誤

java.io .FileNotFoundException:無法打開類路徑資源[applicationContext.xml],因爲它不存在 at org.springframework.core.io.ClassPathResource.getInputStream(ClassP athResource.java:157) 在org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328) 在org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)

請幫我解決這個問題。謝謝

+0

您的'applicationContext.xml'文件位於類路徑中嗎?如果它在「WEB-INF」的根源之內,我不相信它。嘗試將其移動到源文件夾的根目錄。 –

+0

它位於'main/webapps/WEB-INF/applicationContext.xml'目錄下。所以它應該可用? – user3230140

+0

我一定會嘗試。順便說一句,我用來獲取bean的代碼是正確的?感謝您的回覆 。 – user3230140

回答

2

嘗試將應用程序上下文文件移動到類路徑上,例如, WEB-INF/classes

+0

這是一個永久性修復? 'WEB-INF/classes'文件夾是否不會被寫入下一個版本或者在部署時不可用? –

+0

幾乎不是永久性的,最好將文件放在'src/main/resources'中,這樣文件在構建之後最終會在類路徑中結束:) – Reimeus

0

如果您需要獲取單個bean,則不需要加載整個應用程序上下文。事實上,你可能不想這樣做,因爲這會在你不需要的上下文中加載其他的東西。考慮使用Spring「知曉」接口,例如BeanFactoryAwareApplicationContextAware

想要引用bean工廠或上下文的類只是實現了這些,

public class MyClass implements BeanFactoryAware { 

    public void setBeanFactory(BeanFactory factory) { 
     // get a reference to the bean factory 
    } 

    // now in here you can reference the bean factory and lookup the beans 

} 
1

我不相信你的applicationContext.xml文件位於類路徑中。嘗試將該文件放在source folder的根目錄下,以便將其放在類路徑中。

相關問題