Spring HIbernate 整合问题

wuhanliming 2014-07-10 07:16:22
测试出错,请大家帮我看看怎么回事:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of resource methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'us': Injection of resource methods failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.hibernate.SessionFactory] is defined: Unsatisfied dependency of type [interface org.hibernate.SessionFactory]: expected at least 1 matching bean
at

<?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"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.bjsxt"/>

<!--
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
-->

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>
classpath:jdbc.properties
</value>
</property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>com.bjsxt.model.User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>


</beans>


package com.bjsxt.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
@Component("userService")
public class UserService {

private UserDAO userDAO;

@Resource(name="us")
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}

public UserDAO getUserDAO() {
return userDAO;
}

public void add(User u){
this.userDAO.save(u);
}

}


package com.bjsxt.service;

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

import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;

@SuppressWarnings("unused")
public class UserServiceTest {

@Test
public void testAdd() throws Exception {
ClassPathXmlApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml");

UserService service = (UserService)cxt.getBean("userService");
System.out.println(service.getClass());
service.add(new User());
}



...全文
280 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuhanliming 2014-07-13
  • 打赏
  • 举报
回复
这段代码不注释掉就不会出错了。
 <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.bjsxt.model.User</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>
tangwei070 2014-07-11
  • 打赏
  • 举报
回复
是否加载顺序问题。 没有定义 sessionfactory ?
wuhanliming 2014-07-11
  • 打赏
  • 举报
回复
引用 1 楼 hzw2312 的回复:
Error creating bean with name 'us': 是由private UserDAO userDAO;创建出错引出userService创建异常! 所以先看看你的userDAO吧~! 另外对注解方式不是很了解,你都注解了为什么还要用get/set方法呢?
谢谢大神,我有点明白了,晚上回去,我把userdao源码贴上来。现在在学习阶段,用xml方式和annotation方式两种方式混合着用的。
wuhanliming 2014-07-11
  • 打赏
  • 举报
回复
这是UserDAOImpl类的源码
package com.bjsxt.daoImpl;


import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;

import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;

@Component("us")
public class UserDAOImpl implements UserDAO {

	private SessionFactory session;
	
	public void save(User user) {
		
		System.out.println("user saved!");
	}

	@Resource
	public void setSession(SessionFactory session) {
		this.session = session;
	}

	public SessionFactory getSession() {
		return session;
	}
}
wuhanliming 2014-07-11
  • 打赏
  • 举报
回复
引用 3 楼 tangwei070 的回复:
是否加载顺序问题。 没有定义 sessionfactory ?
有加载AnnotationSessionFactoryBean啊。
BUG胡汉三 2014-07-10
  • 打赏
  • 举报
回复
Error creating bean with name 'us': 是由private UserDAO userDAO;创建出错引出userService创建异常! 所以先看看你的userDAO吧~! 另外对注解方式不是很了解,你都注解了为什么还要用get/set方法呢?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧