2016-12-25 110 views
-1

我與NetBeans 8.1(新項目>的Maven> Java應用程序),使這個非常簡單的項目:Spring配置XML沒有發現的ApplicationContext

enter image description here

這裏的App.java

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class App { 

    public static void main(String[] args) { 
     System.out.println("why"); 

     ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); 

     MyObject obj = (MyObject) context.getBean("myobj"); 

     obj.getMessage(); 
    } 

} 

這是MyObject.java

public class MyObject { 
    private String message; 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

} 

Beans.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="myobj" class="asd.spring1.MyObject"> 
     <property name="message" value="Hello World!"/> 
    </bean> 

</beans> 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project 
    xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>asd</groupId> 
    <artifactId>Spring1</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.3.5.RELEASE</version> 
     </dependency> 
    </dependencies> 

</project> 

如果我嘗試運行該項目,我得到FileNotFoundException

why 
Dec 25, 2016 7:05:13 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]4d405ef7: startup date [Sun Dec 25 19:05:13 EET 2016]; root of context hierarchy 
Dec 25, 2016 7:05:13 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [Beans.xml] 
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [Beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [Beans.xml] cannot be opened because it does not exist 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252) 
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) 
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) 
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129) 
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:613) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:514) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at asd.spring1.App.main(App.java:11) 
Caused by: java.io.FileNotFoundException: class path resource [Beans.xml] cannot be opened because it does not exist 
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330) 
    ... 13 more 

正如你可以看到我已經把Beans.xml無處不在。你知道我爲什麼會出錯,我該如何解決這個問題?

+0

除了'ClassPath [...]'之外,你無處不在。 –

+0

請詳細說明一下,我怎麼把它放到'ClassPath [']'? –

+0

瞭解[classpath in java](https://docs.oracle.com/javase/tutorial/essential/environment/paths.html)是什麼,以及如何使用它以及它與文件在文件系統中。 – mangotang

回答

2

您可以檢查編譯的JAR,它不包含Beans.xml。見下面的解釋。

首先,你不應該把非java文件放在src/main/java目錄下。其次,您可以檢查Maven的構建輸出(默認調用資源插件):默認情況下,它使用src/main/resources目錄來搜索資源。

因此,您應該將您的XML文件放置到src/main/resources目錄中。

有關更多詳細信息,請參閱Maven Resources Plugin

0

您是否將Beans.xml放在目標文件夾中,您需要將您的xml文件放在編譯類所在的目錄內某處。

此外,如果有建築物,並與ID運行你的應用程序(所以它編譯,默認情況下在某個文件夾移動類),你也可以嘗試把
ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:Beans.xml"); 就一定要檢查所有的包中的類路徑爲您配置類。