org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем 'userController': сбой внедрения зависимостей с автопроводкой

1

Я просмотрел много связанных тем и пробовал по-разному, но ошибка все еще существует. Окружающая среда: данные весны jpa, Hibernate, maven, tomcat7

Стек ошибок:

org.apache.catalina.core.StandardContext listenerStart SEVERE: Исключить отправку контекста инициализированное событие в экземпляр слушателя класса org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'userController': Инъекция автоуведомленных зависимостей не удалась; Вложенное исключение - org.springframework.beans.factory.BeanCreationException: Не удалось создать поле autwire: private com.zzz.service.UserService com.zzz.controller.UserController.userService; Вложенное исключение - это org.springframework.beans.factory.NoSuchBeanDefinitionException: никакой квалификационный компонент типа [com.zzz.service.UserService], найденный для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат на автоподключение для этой зависимости. Аннотации зависимостей: {@org.springframework.beans.factory.annotation.Autowired(required = true)} at...

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans" ... ... >
<context:component-scan base-package="com.zzz">
    <context:exclude-filter type="annotation"
        expression="org.springframework.stereotype.Controller" />
</context:component-scan>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/zzz" />
    <property name="username" value="root" />
    <property name="password" value="root" />
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="com.zzz.entity" />
    <property name="dataSource" ref="dataSource" />
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        </props>
    </property>
    <property name="persistenceProvider">
        <bean class="org.hibernate.jpa.HibernatePersistenceProvider" />
    </property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="dataSource" ref="dataSource" />
 </bean>

 <jpa:repositories base-package="com.zzz.repository" />

диспетчер-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans" ... ... >
<context:component-scan base-package="com.zzz.controller" />
<mvc:annotation-driven />
<mvc:resources mapping="/static/**" location="static/" />

<bean id="tilesConfigurer"
    class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/defs/templates.xml</value>
        </list>
    </property>
</bean>

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>
</beans>

UserController.java

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/users")
    public String users(Model model) {
        model.addAttribute("users", userService.findAll());
        return "users";
    }
}

UserService.java

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public List<User> findAll() {
        return userRepository.findAll();
    }
}

UserRepository.java

public interface UserRepository extends JpaRepository<User, Integer> {

}

UDPATE 1

Имеются 2 ошибки,

Не удалось создать поле autwire: private com.zzz.repository.UserRepository com.zzz.service.UserService.userRepository

не удалось открыть поле autwire: private com.zzz.service.UserService com.zzz.controller.UserController.userService

ОБНОВЛЕНИЕ 2

Я попытался использовать servlet-dispatcher.xml в качестве единственного файла конфигурации (поместил в него содержимое applicationContext.xml), он отлично работает. Так что проблема между этими двумя файлами xml, но я не мог этого рассказать.

ОБНОВЛЕНИЕ 3

Я переименовал applicationContext.xml в root-context.xml и установил для него contextConfigLocation в web.xml, ошибка исчезла!

Кажется, что некоторая ошибка конфигурации в applicationContext.xml, кто-нибудь может помочь?

  • 0
    Что произойдет, если вы пропустите исключающий фильтр? например, <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
  • 0
    та же ошибка, спасибо.
Показать ещё 8 комментариев
Теги:
maven
spring
hibernate
jpa

1 ответ

0

другое предположение: в диспетчере xml вы проверяете только пакет контроллера... так что если файл application.xml не загружен, он не сканирует пакет услуг и, следовательно, пользовательская служба не загружается... было бы интересно, что произойдет, если вы просматриваете весь пакет com.zzz в dispatcher.xml

Ещё вопросы

Сообщество Overcoder
Наверх
Меню