2015-01-30 2 views
0

Что я делаю: Я загружаю внешнее JAR-приложение Spring в другое приложение без пружины. Я делаю это так:Не удается правильно загрузить Spring Context

ApplicationContext ap = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/application-context.xml"); 
MyService myService = (MyService) ap.getBean("myBusinessService"); 

это исключение, которое я получаю:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myBusinessService': Injection of autowired dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.test.domain.dao.MyDAO com.test.domain.service.impl.MyBusinessService.viaggioDAO; nested exception is 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.test.domain.dao.MyDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. 

пакета внутри этой баночки являются:

  • com.test.domain.service для обслуживания Интерфейсы
  • com.test.domain.services.impl f или реализации услуг
  • com.test.domain.dao для DAO интерфейсов
  • com.test.domain.dao.impl для реализации DAO

Вопрос: Почему я получаю это ошибка?

EDIT: больше информации о моем приложении.

приложений context.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" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
          http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <!-- Spring IoC Context --> 
    <context:component-scan base-package="com.test" /> 

    <import resource="root-config.xml" /> 
    <import resource="classpath:/root-context.xml" /> 

    <!-- Enables the Spring MVC @Controller programming model --> 
    <mvc:annotation-driven /> 

</beans> 

MyBusinessService.java

@Service(value="myBusinessService") 
public class MyBusinessService implements MyService { 
    @Autowired 
    private MyDAO myDAO; 

    @Override 
    public List<Stuff> getAllStuff() throws SQLException { 
     List<Stuff> stuff = this.myDAO.findAllStuff(); 
     return stuff; 
    } 
} 
+0

Не могли бы вы сообщить нам, если аннотация '@ Repository' дана в интерфейсе DAO или реализации DAO? – Mithun

+0

Это указано в реализации DAO. И Служба тоже находится в реализации Сервиса. – abierto

+0

@abiertoCan, вы можете поделиться с нами приложением-context.xml и com.test.domain.service.impl.MyBusinessService.java с нами. – erhun

ответ

0

Это проблема visiblity, проверьте ли вы перечислили все пакеты в вашем dispatcher-servlet.xml. Добавить,

<context:component-scan base-package="com.test.domain" /> 

сделать все пакет видимого диспетчеру

Кроме того, убедитесь, что боб вы пытаетесь autowire Шоуда иметь действительный спецификатор, как @Component или @Service

Если вы используете xml убедитесь, что вы определили компонент в диспетчере. Перед автоподготовкой

+0

Моя весенняя банка не является веб-приложением, но мое новое приложение будет работать внутри cointainer (то есть tomcat). Все мои службы и даос получили их относительную аннотацию сервиса или репозитория. Даже проверка компонентов выполняется на моем xml.что вы имеете в виду «определить фасоль в диспетчере до его автоустройства»? – abierto

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