Spring3和MyBatis3整合时一个诡异的问题,困扰两天了。
这两天一直在搞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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
又帮助到了我.谢谢
我也遇到了同样的问题,但是我已经解决了:
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注解超过两个
同求:5080061@qq.com
解决没 大哥...求一份整合好的代码!!!
我也不会整合这几个!!!
邮箱yidongnan@gmail.com
引用来自“Cray”的答案
应该跟配置文件有关 把配置文件发出来看看
大哥,测试里面没有web环境。。。
应该跟配置文件有关 把配置文件发出来看看