2013-04-15 5 views
0

Я хочу создать обработчик импорта данных Solr, используя Spring как Ioc. Когда я пытаюсь вызвать обработчик из Solr, я оказался ниже ошибкиSpring не может загрузить конфигурацию на основе java

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to load bean class: com.yoox.shanghai.AppConfig; nested exception is java.io.FileNotFoundException: class path resource **[com/my/app/AppConfig.class]** cannot be opened because it does not exist 

Обратите внимание на путь, напечатанный в сообщении. Похоже, что он использует относительный путь. Я не знаю, в чем причина.

Я использую Java based container configuration, и компиляция проходит. И мой код работает с JUnit4.

appCtx = new AnnotationConfigApplicationContext(AppConfig.class); 
+0

Как вы загружаете контекст Весны? Добавьте соответствующий код/​​конфигурацию. – 2013-04-15 08:15:34

+0

Выполняет ли 'resources.AppConfig.class' компиляцию? Это не соответствует 'com/my/app/AppConfig.class'. – 2013-04-15 08:22:16

+0

@LutzHorn, thx :) Я вставил неправильный код. – davidshen84

ответ

0

Я долго искал googled, но не смог найти ответа о том, как весна разрешает путь класса по умолчанию. Но я обнаружил, что люди пытаются явно установить загрузчик классов, поэтому я попробовал.

appCtx = new AnnotationConfigApplicationContext(); 
appCtx.setClassLoader(this.getClass().getClassLoader()); 
appCtx.register(AppConfig.class); 
appCtx.refresh(); 

И это работает: D

Однако я не удовлетворен этим ответом. Надеюсь, кто-то может указать, что не так с моей логикой загрузки класса.

+0

Я не мог найти setClassLoader весной 3.4! Как вы добрались до этого сеттера? – mghz

+0

Если [document] (http: // docs .spring.io/spring/docs/3.0.x/api/org/springframework/context/annotation/AnnotationConfigApplicationContext.html) верна, она должна быть там. Но я думаю, что * Spring * слишком велик. Я обратился к Google ** Guice **. – davidshen84

0

Вы уверены, что правильно импортировали приложение в AppConfig? В противном случае убедитесь, что класс действительно развернут (проверьте каталог развертывания).

+0

Да, я проверил, класс есть. Ключом к этой проблеме является то, как весна находит классы. Я попытался проверить значение classpath, но я не знаю, где искать :( – davidshen84

+0

Файлы конфигурации Spring обычно являются ресурсами класса, хранящимися в папке 'src/main/resources'. В процессе сборки они копируются в 'WEB-INF/classes'. Используете ли вы Maven? – benjiman

+0

нет, я не использую Maven. – davidshen84

Смежные вопросы