gpt4 book ai didi

java - 如何解决 - 创建名为 'defaultController' 的 bean 时出错

转载 作者:行者123 更新时间:2023-11-30 02:18:07 24 4
gpt4 key购买 nike

我是 Spring MVCHibernate 的新手。几天来,我试图制作一个简单的 spring 项目,但出现了一些错误。错误显示org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“CustomerDAOImp”的bean时出错

这是我的错误

HTTP Status 500 - Internal Server Error

type Exception report

messageInternal Server Error

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet dispatcher threw exception root cause

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'CustomerDAOImp': Unsatisfied dependency expressed through field 'sessionFactory'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.hibernate.SessionFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} root cause

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.hibernate.SessionFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1.1 logs.

GlassFish Server Open Source Edition 4.1.1

我使用maven多模块来完成这个项目。这里的“CustomerDAOImp”是我在 CustomerDAOImp 类中定义的存储库的名称。这是扩展 GenericImp 类并实现 CustomerDAO 接口(interface)的 java 类,并且 CustomerDAO 进一步扩展了 GenericDAO 接口(interface)。

CustomerDAOImp

@Repository(value = "CustomerDAOImp")
public class CustomerDAOImp extends GenericDAOImp<Customer> implements CustomerDAO{

}

CustomerDAO

public interface CustomerDAO extends GenericDAO<Customer>{

}

通用DAO

public interface GenericDAO<T> {
void insert(T t);
void update(T t);
boolean delete(int id);
List<T> getAll();
T getById(int id);
}

还有我的用于映射 jsp 页面的 Controller

@Controller
public class DefaultController {
@Autowired
CustomerDAOImp customerDaoImp;

@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "user/dairy/index";
}

@RequestMapping(value = "/customer", method = RequestMethod.GET)
public String customer(Model model) {
model.addAttribute("customer", customerDaoImp.getAll());
return "user/dairy/customer";
}
}

dispatcher-servlet.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"
xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
">

<context:component-scan base-package="com.nishan.dairy"/>
<mvc:annotation-driven/>
<mvc:resources mapping="/static/**" location="/WEB-INF/assets/"/>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>

</beans>

applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:security="http://www.springframework.org/schema/security"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
">
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/db/jdbc.properties"/>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}"
p:username="${jdbc.username}" p:password="${jdbc.password}"/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.nishan.dairyreport.entity"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>

</beans>

这是我的项目结构

**Here is my project structure**

希望得到积极的回应,谢谢......

最佳答案

你是如何创建ApplicationContext的?您是否在程序中以编程方式创建了它,或者期望 Spring 声明来处理它?<​​/p>

根据您提供的信息,故障似乎发生在调度程序初始化和相应的 DAO 依赖项注入(inject)期间。DAO 依赖项已在 applicationContext.xml 中定义,与 dispatcher-servlet.xml 不同。所以看起来 applicationContext.xml 没有被加载,而 dispatcher-servlet.xml 正在加载。

检查您的 web.xml 以确保您有一个 ContextLoader,可以自动实例化 Spring MVC 应用程序的根和 Web 应用程序上下文。

这些行应该存在:

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

您可以按上述方式初始化上下文,也可以通过编程方式进行;请参阅以下内容了解更多详细信息: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet-context-hierarchyhttps://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#context-introduction

您还可以检查日志中的上下文是否正确加载。他们将提供有关 bean 初始化的详细信息。在应用程序初始化和 servlet 加载阶段共享您的日志消息。

一些日志引用: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

关于java - 如何解决 - 创建名为 'defaultController' 的 bean 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47679724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com