初學Spring,做第一個試驗時很多人都會碰到一個問題,就是程序執行時不能正常執行顯示預期結果,而是會顯示一些異常信息,主要就是java.io.FileNotFoundException這個異常信息。我在做實驗時也遇到了這個問題,現在把我遇到的問題及解決方法貼出來,希望能讓初學Spring的人少走點彎路。
第一種情況:使用Myeclipse工具創建Spring項目時,按照書上的例子寫好程序后,執行時出現該異常。這時需要注意到,Myeclipse默認的把applicationContext.xml文件放在項目的src目錄下,而一般我們看到的例子在讀取這個文件時使用的語句如下:
代碼1 :
ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");
其實這時這么寫就不行了,因為這個語句在查找applicationContext.xml文件時是在項目的根目錄下查找,而不會到src目錄下查找。這時,應該把語句改為:
代碼2:
ApplicationContext context = new FileSystemXmlApplicationContext("src/applicationContext.xml");
即加上src這個目錄,就不會出錯了。如果不是使用Myeclipse而是使用eclipse自己導入spring包進行開發,就要先看一下在建項目的時候,是選擇把.java文件和.class文件分開放置還是放在同一個目錄,如果選擇了分開放置則情況和上面的一樣(前提條件是applicationContext.xml文件也是自己建在src目錄下);如果選擇了把.java文件和.class文件放在同一個目錄下,這時就要看建applicationContext.xml文件時放在哪個目錄下了,如果是放在根目錄下,就使用代碼1的代碼就可以了。如果把applicationContext.xml文件和.java文件放在了同一個目錄下,這個時候就要加上程序的包路徑了,如我的Java源程序的包名是org.wzhongyu,我就要用下面的語句來實現:
代碼3:(注意:這里不能用org.wzhongyu.applicationContext.xml,因為程序會認為org.wzhongyu.也是文件名的內容)
ApplicationContext context = new FileSystemXmlApplicationContext("org/wzhongyu/applicationContext.xml");
第二種情況:使用eclipse+springIDE進行開發,而配置文件使用屬性配置文件(即.properties文件),出現異常。這時應該注意,配置文件應該放在CLASSPATH路徑下,如果建項目的時候沒有選擇把.java文件和.class文件分開放置,那么這個.properties文件就應該放在項目的根目錄下,這樣不會出錯。如果建項目的時候,選擇了把.java文件和.class文件分別放在src目錄和bin目錄下,這時一定要注意把.properties文件放在src根目錄下,否則就會出錯。但是,我們讀取這個配置文件的時候,一定不能加上src這個目錄,用下面的代碼:
代碼4:
BeanDefinitionRegistry reg = new DefaultListableBeanFactory();
PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg);
reader.loadBeanDefinitions(new ClassPathResource("beans-config.properties"));
這里沒有加上src,因為程序執行的CLASSPATH就是在src根目錄下,不放在這里就會出錯,就是出現java.io.FileNotFoundException這個異常信息。
上面這些,是我遇到的問題并解決它們的辦法,如果您來到這里并遇到一些和我遇到的不一樣的情況,也歡迎您貼出來,大家共同學習。另外,推薦一本關于Spring的書,寫的還不錯。《Spring 2.0技術手冊》