java - 在我的控制器上使用 @Autowired 时出现 NoSuchBeanDefinitionException
问题描述
我在 Spring 中遇到了 bean 的问题。当我尝试在我的服务器上运行它时,我得到了错误:
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&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 是在我的上下文文件中定义的,如果我在本地运行一个只获取该 bean 的主类 (PersonaDAO pDAO = context.getBean(PersonaDAO.class);) 它工作得非常好,所以它就像我的应用程序只在感觉时识别 bean。谢谢你的帮助
解决方案
您正在用 XML 重新定义相同的 bean,并且应该自动扫描和context:annotation-config
bean 。只使用一种机制来注册 bean。@Controller
@Repository
推荐阅读
- .net - 使用 Google Calendar .Net SDK 从 Google 日历活动中删除 Google Meet 链接
- mapbox - MapBox:如何使用折线捕获地图的位图
- google-bigquery - 如何将数据从按年/月/日分区的存储桶中加载到 bigquery
- php - Twig如何仅在分页的第一页显示文本
- apache-spark - Glue 书签倒带功能是否会从接收器中删除数据?
- python - 确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列
- visual-studio-code - VSCode 使用宏运行脚本
- android - 把replaceFragment放到onBindViewHolder里面对吗?
- php - 如何通过动作的参数注入相同类型的不同服务?
- unity3d - 我无法安装 2D sprite 包?