【问题标题】:I would like to get advice on Spring BeanCreationException Error我想获得有关 Spring BeanCreationException 错误的建议
【发布时间】:2018-01-09 21:54:33
【问题描述】:

这是刚才提出问题的人。

问题上的错误是成功的,但我遇到了另一个错误。

作为Spring的初学者,有很多事情我不知道和

我有很多问题要问。请理解。

错误代码。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private dao.IMemberDAO service.MemberService.memberDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [dao.IMemberDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Related cause: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\Users\admin\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\rachelivf\WEB-INF\classes\dao\mapper\memberDaoMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'member'.  Cause: java.lang.ClassNotFoundException: Cannot find class: member
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)

以下是 MemberService.java 代码。

package service;

import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;


import dao.IMemberDAO;
import model.Member;

@Service
public class MemberService  
{
    @Autowired
    private IMemberDAO memberDao;

    public void joinMember(HashMap<String, Object> params)
    {
        if(params.get("pw").equals(params.get("pwd_CHECK")))
        {
            memberDao.insertMember(params);
        }
    }
}

这是 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:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
        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-4.1.xsd">

    <context:component-scan base-package="service" />

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

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mapperLocations" value="classpath*:dao/mapper/*.xml"></property>
    </bean>

    <bean id="memberDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
        <property name="mapperInterface" value="dao.IMemberDAO"></property>
    </bean>

</beans>

据我所知,

这就是出现上述错误的原因,因为

我没有插入注释服务。

但是显然我插入了Service注解,却报错了。

请给我建议。

是memberDaoMapper代码。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="dao.IMemberDAO">
    <insert id="insertMember" parameterType="java.util.HashMap">
        insert into member values
        (
            #{id},#{pw},default     
        )
    </insert>

    <update id="updateMember" parameterType="java.util.HashMap">
        update member set id = #{id}, pw = #{pw}, authority = #{authority}
    </update>

    <delete id="deleteMember" parameterType="String">
        delete from member where id = #{id}
    </delete>

    <select id="selectOne" parameterType="String" resultType="member">
        select * from member where id = #{id}
    </select>

    <select id="selectAll" parameterType="String" resultType="member">
        select * from member
    </select>
</mapper>

是IMemberDao.java代码。

package dao;

import java.util.HashMap;

import java.util.List;

import org.mybatis.spring.annotation.MapperScan;

import model.Member;

public interface IMemberDAO 
{
    public int insertMember(HashMap<String, Object> params);

    public int updateMember(HashMap<String, Object> params);

    public int deleteMember(String id);

    public HashMap<String, Object> selectOne(String id);

    public List<HashMap<String, Object>> selectAll();
}

我彻底检查了错字,但没有找到错字。

有什么问题?

【问题讨论】:

  • 我仔细检查了memberDaoMapper,没有错别字,不知道是什么问题。我会将 memberDaoMapper 部分发布到问题中。可以查一下吗?
  • 更多信息总是有用的
  • 根据提供的额外信息更新了答案。

标签: spring spring-mvc dependency-injection spring-bean


【解决方案1】:

堆栈跟踪的这一部分应该给你一个正确的问题提示:

org.apache.ibatis.type.TypeException: Could not resolve type alias 'member'

如果没有映射器文件,我认为其中一个文件有错误,并且您可能在需要完全限定类名的 XML 属性中写了 member

我的建议是在这些文件中搜索member,您应该会在不正确的字段中找到它(主要是parameterTyperesultType

查看您添加的映射文件,您有resultType="member"。如上所述resultType 需要一个完全限定的类名。 您的问题的解决方案主要是2:

  1. 修改resultType为实际类

    <select id="selectOne" parameterType="String" resultType="model.Member">
        select * from member where id = #{id}
    </select>
    
    <select id="selectAll" parameterType="String" resultType="model.Member">
        select * from member
    </select>
    
  2. 为 sampleVO 类添加类型别名标签。

    <mapper namespace="model.Member">
         <typeAlias alias="member" type="model.Member" />
        ...
    </mapper>
    

【讨论】:

  • 我没有在DAO部分的selectAll中指定参数,但是由于mapper将参数类型指定为selectAll而出现错误。由于您的建议,我解决了这个问题。它工作得很好!.. 但是有一个问题。 mapper 和 Dao 应该 1:1 匹配吗?
  • 这实际上取决于您希望如何构建项目,但如果项目增长,将每个 DAO 的查询放在单独的文件中可能有助于维护性。
  • 我知道了新信息,谢谢。但是我想知道的是mapper中指定的parameterType和Dao中指定的parameterType必须相同。
猜你喜欢
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2018-05-25
  • 2022-01-08
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
相关资源
最近更新 更多