NoSuchBeanDefinitionException при использовании @Autowired на моем контроллере - PullRequest
0 голосов
/ 20 февраля 2019

У меня проблема с бобами весной.Когда я пытаюсь запустить это на своем сервере, я получаю сообщение об ошибке:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'rio.antelodel.david.ejercicios_programacion.Model.DAO.PersonaDAO' available

Это мои классы:

@Controller
public class PersonaController {

    @Autowired
    private PersonaDAO personaDAO;

    @RequestMapping("/persona")
    public ModelAndView getPersonasList () {

        ...

    }

}

Вот PersonaDAO

@Repository
public class PersonaDAO extends AHibernateDAO < Persona > {

    public Persona find (String key) {

        return getCurrentSession().get(getCurrentClass(), key);

    }

}

И вотмой весенний контекстный файл

<?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:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">

<context:annotation-config/>
<tx:annotation-driven transaction-manager="txManager"/>

<bean id = "txManager" class = "org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name = "sessionFactory" ref = "sessionFactory" />
</bean>

<bean id= "dataSource" class= "org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name = "driverClassName" value = "com.mysql.cj.jdbc.Driver"/>
    <property name = "url" value = "jdbc:mysql://localhost:3306/gestion_ejercicios_programacion?useSSL=false&amp;serverTimezone=UTC"/>
    <property name = "username" value = "root"/>
    <property name = "password" value = "mysqlpass"/>

</bean>

<bean id = "sessionFactory" class = "org.springframework.orm.hibernate5.LocalSessionFactoryBean">

    <property name = "dataSource" ref = "dataSource"/>
    <property name = "packagesToScan" value = "rio.antelodel.david.ejercicios_programacion."/>

    <property name = "hibernateProperties">
        <props>
            <prop key = "dialect">org.hibernate.dialect.Derbydialect</prop>
        </props>
    </property>

</bean>

<bean id = "personaController" class = "rio.antelodel.david.ejercicios_programacion.Controller.PersonaController" />

<bean id = "alumnoDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.AlumnoDAO" />
<bean id = "archivoDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.ArchivoDAO" />
<bean id = "categoriaDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.CategoriaDAO" />
<bean id = "dificultadAlumnoEjercicioDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.DificultadAlumnoEjercicioDAO" />
<bean id = "dificultadDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.DificultadDAO" />
<bean id = "ejercicioDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.EjercicioDAO" />
<bean id = "ejercicioIdeaDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.EjercicioIdeaDAO" />
<bean id = "personaDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.PersonaDAO" />
<bean id = "practicaDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.PracticaDAO" />
<bean id = "practicaEvaluacionDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.PracticaEvaluacionDAO" />
<bean id = "profesorDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.ProfesorDAO" />
<bean id = "pruebaEvaluacionDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.PruebaEvaluacionDAO" />
<bean id = "titulacionDAO" class = "rio.antelodel.david.ejercicios_programacion.Model.DAO.TitulacionDAO" />

</beans>

Я проверил и убедился, что ошибка в моей строке @Autowired в контроллере.

Дело в том, что мой бин определен в моем контекстном файле,и если я запускаю локально основной класс, который просто получает указанный bean-компонент (PersonaDAO pDAO = context.getBean (PersonaDAO.class);), он прекрасно работает, так что мое приложение идентифицирует bean-компонент только тогда, когда ему это нравится.Спасибо за любую помощь

1 Ответ

0 голосов
/ 20 февраля 2019

Вы переопределяете те же bean-компоненты в XML, и с помощью context:annotation-config например, @Controller и @Repository bean-компоненты должны автоматически сканироваться.Используйте только один механизм для регистрации bean-компонентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...