2017-08-02 68 views
4

這是剛剛提出問題的人。我想獲得有關Spring BeanCreationException的建議錯誤

該問題的錯誤是成功的,但我面臨着另一個錯誤。

如春初學者,有很多事情我不知道和

我有很多問題要問。敬請諒解。

錯誤代碼。

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> 

據我所知,

這是因爲

我沒有插入註釋的服務,爲什麼會出現上述錯誤的原因。

但顯然我插入了服務註釋,但我得到一個錯誤。

請給我建議。

它是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(); 
} 

我徹底檢查錯字,但沒有被發現錯字。

有什麼問題?

+1

我仔細檢查了memberDaoMapper,但沒有錯別字,我不知道是什麼問題。我將發佈memberDaoMapper部分的問題。你能檢查它嗎? –

+1

更多信息總是有用 – araknoid

+1

根據提供的額外信息更新答案。 – araknoid

回答

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> 
    
+1

我沒有在DAO部分的selectAll中指定參數,但是由於映射器將參數類型指定爲selectAll,所以發生錯誤。由於你的建議,我解決了這個問題。這工作非常好!但是有一個問題。 mapper和Dao匹配1:1嗎? –

+0

這實際上取決於你想如何構建你的項目,但是如果項目增長的話,將每個DAO的查詢放在一個單獨的文件中對於可維護性來說可能是有幫助的。 – araknoid

+1

我知道新的信息,謝謝。但是我想知道的是mapper中指定的parameterType和Dao中指定的parameterType必須相同。 –

相關問題