Spring+MyBatis整合开发时 Injection of autowired dependencies failed的错误解决方法

Python转java开发,瞬间感觉框架好难受,总是不注意注解,找的很辛苦,读次文章,一定一定请注意注解,,,,,

 

今天在调试代码时,Spring启动后出现了错误:Injection of autowired dependencies failed;……的错误。

详细的错误信息如下:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl': Injection of autowired dependencies failed;
  • 1

经过一个多小时的Code Review和调试终于解决了问题,最后总结解决问题的方法,其实是MyBatis的一个映射文件中的resultType=”java.lang.Integer” parameterType=”java.lang.Integer”写错误。

但是这个错误却引发了Injection of autowired dependencies failed;……的错误。一开始以为是Spring配置文件错误了;再后来仔细检查各个包下面的注解;最后检查MyBatis配置文件时才发现了错误。

浪费时间的地方在于:一开始总是认为Spring配置文件和Spring注解使用错误;没有仔细检查MyBatis的映射文件。

在解决这个问题的过程中,在网上发现其实很多帖子,很多开发者都遇到过类似的问题;但是发现很多帖子都没有给出完整、准确的解决方法。所以总结一下解决过程和思路。

样例代码如下:

1. Spring配置文件applicationContext.xml的要点




    
    

    
    

    

    
        
        
    
    

    

    

    
    

    
    
        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
    

    
    
        
    

    
    
        
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

2. DAO层代码

package com.keymen.annotation;

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

@Repository
@Autowired
public @interface MyBatisDAO {


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
package com.keymen.dao;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.keymen.annotation.MyBatisDAO;
import com.keymen.entity.User;

@MyBatisDAO
public interface UserDao {

    @Autowired
    User selectByPrimaryKey(Integer id);
    @Autowired
    List queryAllUser();
    @Autowired
    public User findUserByUsername(String username);
    @Autowired(required=true)
    public Integer getCountOfRecord();

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3. Service层代码

package com.keymen.service;

import java.util.List;
import java.util.Map;

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

import com.keymen.entity.User;

/**
 * 注意:这里的@Service注解不能少 
 */
@Service  
public interface UserService {

    @Autowired
    public User getUserById(int userId);
    @Autowired
    public List queryAllUser();
    @Autowired
    public Map findUserByUsername(String username);
    @Autowired
    public int getCountOfRecord();

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
package com.keymen.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.keymen.dao.UserDao;
import com.keymen.entity.User;
import com.keymen.service.UserService;

/**
 * 注意:这里的@Service注解不能少 
 */
@Service
@Transactional
public class UserServiceImpl implements UserService{

    @Autowired
    private UserDao userDao;

    @Override
    public User getUserById(int userId) {
        System.out.println("111---11111");
        System.out.println(userDao);
        return this.userDao.selectByPrimaryKey(userId);
    }

    @Override
    public List queryAllUser() {
        // TODO Auto-generated method stub
        List userList=this.userDao.queryAllUser();
        return userList;
    }

    @Override
    public Map findUserByUsername(String username) {
        // TODO Auto-generated method stub
        User user=this.userDao.findUserByUsername(username);
        HashMap userMap=new HashMap();
        userMap.put(username, user);
        return userMap;
    }

    @Override
    public int getCountOfRecord() {
        // TODO Auto-generated method stub
        int count=this.userDao.getCountOfRecord();
        return count;
    }








}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

4. MyBatis映射文件代码




    
        
        
        
        
        
        
        
    

    

    

    


    


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

5. 调试代码

package com.keymen.test;

import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.keymen.entity.User;
import com.keymen.service.impl.UserServiceImpl;

public class TestGetCountOfRecord {

    public static ApplicationContext ctx=null;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Hello Spring MyBatis!");
        System.out.println("Count of Records:");
        ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        UserServiceImpl userServiceImpl = (UserServiceImpl) ctx.getBean("userServiceImpl");


        int countOfRecord = userServiceImpl.getCountOfRecord();
        System.out.println("Total Count of Records: "+countOfRecord);

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

出错的代码:

  • 1
  • 2
  • 3

修改之后的代码:

  • 1
  • 2
  • 3

一个数据类型的错误,浪费了一个多小时的时间。

总结心得:

遇到问题,不要着急。 
分析问题。 
确立解决问题的思路。 
解决问题。 
解决问题之后的总结。

你可能感兴趣的:(java,Java)