Spring3和MyBatis3整合时一个诡异的问题,困扰两天了。

发布于 2021-11-25 01:55:53 字数 3435 浏览 698 评论 7

这两天一直在搞SpringMVC、Spring3,MyBatis整合,在过程中,启动Tomcat7时有一个问题一直出现,

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.share.persistence.mybatis.mapper.UserMapper] 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)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474)
	... 69 more

软件环境:Spring 3.1.1、MyBatis 3.1.1、MyBatis-Spring 1.1.1 、Maven构建

Spring 相关配置如下:

<context:annotation-config/>
	
	<context:property-placeholder location="classpath:jdbc.properties" />
	
	<!-- 配置DataSource数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
    
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.share.persistence.domain" />
    </bean>
    
    <!-- scan for mappers and let them be autowired -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.share.persistence.mybatis.mapper" />
    </bean>
Dao层的代码:

@Service
public class SampleDaoImpl implements SampleDao {
	
	@Autowired
	private UserMapper userMapper;
	
	public void queryUsers() {
		// TODO Auto-generated method stub
		System.err.println( " querying users... " );
	}

}
奇怪的是,我自己写了java 方法,直接调用applicationContext.xml,反而能取到userMapper对象。

测试SpringMyBatisInvokeTestCase代码:

public class SpringMyBatisInvokeTestCase {

	public static void main(String[] args) {
		System.out.println( "Hello ");
		ApplicationContext ac = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
		UserMapper sd = (UserMapper)ac.getBean("userMapper");
		sd.queryUsers();
	}

}

这里面我个人感觉是不是Web启动中,Dao层使用注解注入userMapper的时候,Spring还没有初始化好userMapp接口对应的Bean对象啊?

望大家指教。搞了很久。。。真心不懂为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

野心澎湃 2021-11-30 20:29:53

又帮助到了我.谢谢

顾挽 2021-11-30 20:23:16

我也遇到了同样的问题,但是我已经解决了:

expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}

看了看源码,@Resource依赖于name和type。默认name.都有时name。出现bean 不唯一要么是dao层没有 extends HibernateDaoSupport或者@Repository("XXX")注解,要么是没有接口有两个或以上的实现但是没有@Service注解或者是@Service注解超过两个

囚你心 2021-11-30 18:35:51
瀞厅☆埖开 2021-11-30 02:55:20

解决没  大哥...求一份整合好的代码!!!

我也不会整合这几个!!!

邮箱yidongnan@gmail.com

剑心龙吟 2021-11-30 01:59:17

引用来自“Cray”的答案

应该跟配置文件有关 把配置文件发出来看看

筱果果 2021-11-29 17:34:53

大哥,测试里面没有web环境。。。

英雄似剑 2021-11-25 04:14:43

应该跟配置文件有关 把配置文件发出来看看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文