Java, Spring, создающий вручную экземпляр Spring bean, получающий «FileNotFoundException: ресурс пути к классу [WEB-INF / spring.properties] не может быть открыт ...» - PullRequest
0 голосов
/ 25 марта 2011

Пока что я только что использовал Spring bean-компоненты, которые являются синглетонами, но теперь я хочу создать его там, где у меня есть scope="prototype" bean-компонент, и создавать его экземпляры каждый раз, когда мне нужен новый экземпляр.

В контексте приложения у меня есть:

<bean id="processDoNewDocSearch_Spr" class="org.jadefalcon.demo.server.processes.ProcessDoNewDocSearch_Spr" scope="prototype"/>

Фактический класс тестовых бобов:

public class ProcessDoNewDocSearch_Spr {

    @Resource(name = "savedsearchesService")
    private SavedSearchesService savedsearchesService;

    public ProcessDoNewDocSearch_Spr () {

    }

    public void Main () {
        SavedSearches ss1 = savedsearchesService.get(3);
        String test= ss1.getSearchname();
        System.out.print( "Search name: " + test);
    }


}

И я пытаюсь создать его таким образом и вызвать метод Main():

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext ( "applicationContext.xml" );
    ProcessDoNewDocSearch_Spr processDoNewDocSearch_Spr = ( ProcessDoNewDocSearch_Spr ) applicationContext.getBean ( "processDoNewDocSearch_Spr" );
    processDoNewDocSearch_Spr.Main();

Это не работает, и я получаю некоторую ошибку о том, что файл WEB-INF / spring.properties отсутствует там, когда он есть, нет проблем с моим приложением, когда я удаляю все, что связано с классом ProcessDoNewDocSearch_Spr мне интересно, если я делаю это правильно. Спасибо

РЕДАКТИРОВАТЬ: Вот сообщение об ошибке, которое я получаю:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [WEB-INF/spring.properties] cannot be opened because it does not exist
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [WEB-INF/spring.properties] cannot be opened because it does not exist
    org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:78)
    org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:663)
    org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:638)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)

РЕДАКТИРОВАТЬ: в корне моего приложения у меня есть файл .classpath и в нем, среди других записей,

    <classpathentry kind="output" path="target/spring-hibernate-mysql/WEB-INF/applicationContext.xml"/>
<classpathentry kind="output" path="target/spring-hibernate-mysql/WEB-INF/spring.properties"/>
    <classpathentry kind="src" path="src/main/webapp/WEB-INF/spring.properties"/>
    <classpathentry kind="src" path="src/main/webapp/WEB-INF/applicationContext.xml"/>

1 Ответ

1 голос
/ 25 марта 2011

Когда вы загружаете файл applicationContext.xml из пути к классам, вы должны убедиться, что файл applicationContext.xml находится в пути к классам времени выполнения вашего приложения. Путь к классу времени выполнения (например, после развертывания и / или вне среды IDE) часто отличается от пути к классу времени сборки.

Информация о пути к классу

В Windows ваш classpath является переменной окружения, которую вы устанавливаете, обращаясь к расширенным системным материалам. Чтобы ваш путь к классам не стал гигантским, я предлагаю вам создать каталоги C: \ lib и c: \ classes. Добавьте каталог c: \ classes в путь к классам и удалите все классы в этом каталоге. Для банок каждая банка должна быть указана на пути к классам. Я поместил их в c: \ lib, чтобы знать, где их искать. затем перечислите каждую банку в пути к классам.

Вот что относится к вам. С помощью описанной мной установки вы можете удалить файл applicationContext.xml в каталог c: \ classes, и он также будет в пути к классам.

...