簡體   English   中英

意外的輸出java.io.FileNotFoundException:運行Spring Application時

[英]Unexpected Output java.io.FileNotFoundException:while running Spring Application

問題

當我執行我的Spring應用程序時,出現以下錯誤。 我有2個類ConsoleWriter和FileWriter,它們的bean是通過添加組件掃描來自動發現並自動注入的,這些組件掃描了放置這些類的包。

分析

我得到了意外的輸出文件未找到,即找不到bean1.xml。

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [com/jalaj/programming/testprog/beans1.xml]; nested exception is java.io.FileNotFoundException: class path resource [com/jalaj/programming/testprog/beans1.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:537)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.test.programming.testprog.test.main(test.java:14)

Caused by: java.io.FileNotFoundException: class path resource [com/jalaj/programming/testprog/beans1.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

目錄結構

下面是我的相同代碼

public interface LogWriter {  //having one method write
public void write(String test);
}

@Component
public class ConsoleWriter implements LogWriter{
public void write(String test){ //method write prints data into console
    System.out.println("Write to Console q"+test);
}
}

@Component
public class FileWriter implements LogWriter {
public void write(String test) { //method write prints data into console
    System.out.println("Write to file"+test);
}
}

@Component
public class Logger {
@Inject  
private ConsoleWriter consoleWriter;
@Inject
private FileWriter fileWriter; 

public ConsoleWriter getConsoleWriter() {
    return consoleWriter;
}
public void setConsoleWriter(ConsoleWriter consoleWriter) {
    this.consoleWriter = consoleWriter;
}
public FileWriter getFileWriter() {
    return fileWriter;
}
   //use this Annotation on top of a setter or DataMember
public void setFileWriter(FileWriter fileWriter) {
    this.fileWriter = fileWriter;
}
public void writeFile(String text){
    if(fileWriter!=null)
    fileWriter.write(text);
}
public void writeConsole(String text){
    if(consoleWriter!=null)
    consoleWriter.write(text);
}



@PostConstruct
public void init(){
System.out.println("Initialization of beans done"); 
}
@PreDestroy
public void destroy(){
    System.out.println("Destruction of beans done");
}
}

beans1.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
    <context:annotation-config></context:annotation-config>
    <context:component-scan
        base-package="com.test.programming.testprog">
    </context:component-scan>
</beans>

testApp

public class test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("/com/jalaj/programming/testprog/beans1.xml");
Logger logger=(Logger)context.getBean("logger");
logger.writeConsole("Hello Jalaj ");
logger.writeFile("Hello ishu ");
((AbstractApplicationContext) context).close();
}

}

誰能指導我如何解決/調試此問題。

嘗試將bean1.xml放在src / main / resources下,並通過以下方式加載文件:

ApplicationContext上下文=新的ClassPathXmlApplicationContext(“ beans1.xml”);

(摘自我對這個問題的評論,以使將來的讀者更容易看到)

您的軟件包不是com.jalaj.programming.testprog ,而是com.test.programing.testprog 嘗試更改代碼中的路徑以反映這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM