SSM整合,测试时提示NoSuchBeanDefinitionException

spring配置文件:

 <?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"
       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">
    <!-- 引入properties -->
    <context:property-placeholder location="mysql.properties"/>
    <!-- 配置数据库连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${mysql.driver}"/>
        <property name="jdbcUrl" value="${mysql.url}"/>
        <property name="user" value="${mysql.username}"/>
        <property name="password" value="${mysql.password}"/>
    </bean>
    <!-- 配置mybatis的SqlSession的工厂:SqlSessionFactoryBean dataSource:注入数据源 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据源 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 指定要使用到mybatis配置文件 -->
        <property name="configLocation" value="classpath:mybatis_config.xml"/>
        <!-- 用于配置mapper映射xml -->
        <property name="mapperLocations" value="classpath*:cn.gzx/mapper/*.xml"/>
    </bean>
    <!-- 创建数据映射器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.gzx.dao"/>
    </bean>
    <!-- 对数据源进行事物管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

web.xml配置文件:

 <!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
   <!-- spring配置 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath*:spring/applicationContext.xml
    </param-value>
  </context-param>
   <!-- 配置spring上下文监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextCleanupListener</listener-class>
  </listener>


</web-app>

目录:
图片说明
测试文件:
图片说明
错误:
图片说明

这里为什么bean注入失败,小白,求解

意思就是找不到AdminDao这个bean,而且你这句话

    <property name="mapperLocations" value="classpath*:cn.gzx/mapper/*.xml"/>这个地方我没记错应该写作classpath:cn/gzx/mapper/*.xml,
            如果要这样写的话映射文件名要写作和dao接口名一样,就是说你叫adminDao.java就得把mapper写作adminDao.xml

用Junit4 测试吧
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**

  • @ClassName: BaseJunitTest
  • @Description: 基础Junit测试类 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/spring/spring-context.xml", "classpath:/spring/spring-jdbc.xml", "classpath:/spring/spring-mvc.xml" }) public class BaseJunitTest {

}

import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

/**

  • @ClassName: DirDAOImplTest
  • @Description: DirDAOImplTest */

public class DirDAOImplTest extends BaseJunitTest {
@Autowired
private DirDAO dirDAO;

/**
 * Test method for {@link com.zijinph.cdms.dao.impl.DirDAOImpl#getListByLevelId(java.lang.Integer)}.
 */
@Test
public void testGetListByLevelId() {

    List<Dir> list = dirDAO.getListByLevelId(1);
    if (null != list && !list.isEmpty()) {
        for (Dir item : list) {
            System.out.println(item);
        }
    }
}
    }

这一句配置的不对呀 cn后面是 . 应该是 /

把你的admin的xml文件贴出来,估计有问题

你在获取admindao这个bean,你有把adminDao装配bean吗

你的问题应该是没有向MapperScannerConfigurer中注入sqlSessionFactory,因为配置MapperScannerConfigurer的目的是帮你创建AdminDAO接口
的实现类,但创建的这个实现类要调用sql语句对数据库进行操作,因此需要用到SqlSession,因此你需要向MapperScannnerConfigurer中注入
sqlSessionFactory。并且这个MapperScannerConfigurer创建出来的实现类在spring容器中的id默认为接口的类名首字母小写,因此你要获得该
实现类的bean需要通过context.getBean("adminDAO");
而且还要注意的是:你使用的是mybatis的mapper接口代理模式。需要遵循以下规则:
1、你的DAO的接口的类名必须与mapper配置文件的文件名一样并处于同一个包下,如AdminMapper.java对应AdminMapper.xml,而不是AdminDao.
java,这样你配置的MapperScanner在扫描该包并创建AdminMapper的实现类时知道到AdminMapper.xml中查找配置的sql语句。
2、AdminMapper接口中的方法名必须与AdminMapper.xml中sql语句的id一致,这样在创建实现类时,实现类中的方法具体调用哪个sql语句就能与
AdminMapper.xml中配置的sql的id对应
3、AdminMapper.xml中sql配置的ResultType、ParameterType必须与AdminMapper接口中方法的返回值和参数值的类型一致,不然也会出问题

    望采纳!!!!




这个问题是因为没有往spring容器里添加AdminDao这个类。解决办法首先你在AdminDao上加@Repository这个注解,然后还需要在你的spring配置文件中加入扫描,

</context:component-scan>
这样估计就可以了

SSM 项目demo 楼主可以看看这里

你的xml的语句出现问题,找不到对应的类,检查一下你的类的名字是不是有什么问题