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

标签 java hibernate spring-mvc

我是 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/

相关文章:

java - 如何以与 List.hashCode() 相同的方式计算流的哈希码

java - 选择查询中的 JDBCPreparedStatement 和参数 (?)

java - Hibernate 5 ID AUTO Generation Type for Oracle 作为 Sequence 和 MySQL 作为 Identity

java - 使用 Spring WebFlow Flow 进行全局异常处理

java - 为什么 Spring 解析我的日期是错误的?

java - 这在生成器中不能应用

java - 在 WAR 文件中打包 JAR 文件

java - 在 Java 应用程序中管理时间的最佳方法是什么?

mysql - Hibernate 标识符名称对于 MySQL 索引来说太长

java - Spring Boot 和自定义 404 错误页面