m0_37928829
Forsaken12345
采纳率79.2%
2018-02-07 02:25 阅读 1.4k
已采纳

SSM整合,测试时提示NoSuchBeanDefinitionException

20

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注入失败,小白,求解

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

11条回答 默认 最新

  • 已采纳
    megustasyzy yrunow 2018-02-07 06:12

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

        <property name="mapperLocations" value="classpath*:cn.gzx/mapper/*.xml"/>这个地方我没记错应该写作classpath:cn/gzx/mapper/*.xml,
                如果要这样写的话映射文件名要写作和dao接口名一样,就是说你叫adminDao.java就得把mapper写作adminDao.xml
    
    点赞 1 评论 复制链接分享
  • macau2008 码YouMe 2018-02-07 02:33

    用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);
            }
        }
    }
        }
    
    点赞 评论 复制链接分享
  • liu13816947142 lyter1214 2018-02-07 02:33

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

    点赞 评论 复制链接分享
  • sd1209286540 sd1209286540 2018-02-07 02:40

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

    点赞 评论 复制链接分享
  • fcfc20050545 云影rache 2018-02-07 02:45

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

    点赞 评论 复制链接分享
  • qq_36127212 踏实而耀眼 2018-02-07 03:10

    你的问题应该是没有向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接口中方法的返回值和参数值的类型一致,不然也会出问题

        望采纳!!!!
    
    点赞 评论 复制链接分享
  • qq_36127212 踏实而耀眼 2018-02-07 03:13




    点赞 评论 复制链接分享
  • a137357679 Ymingf 2018-02-07 03:32

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

    </context:component-scan>
    这样估计就可以了
    
    点赞 评论 复制链接分享
  • a137357679 Ymingf 2018-02-07 03:33

    点赞 评论 复制链接分享
  • qq_27556567 左大头 2018-02-07 05:43

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

    点赞 评论 复制链接分享
  • ww513224892 ww513224892 2018-02-07 09:15

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

    点赞 评论 复制链接分享

相关推荐