了解Dao层的创建和HibernateSupportDao后,忘了要把Spring3.0的Jar包加进去lib文件夹里面,由于Spring3.0开始没有把所有需要有关联的Jar包跟功能整合包放在一起,所以我们需要一步一步的把Jar包加进去,首先先把Spring3.0必要的Jar包加进来,org.springframework.aop-3.0.0.RELEASE.jar、org.springframework.asm-3.0.0.RELEASE.jar、org.springframework.aspects-3.0.0.RELEASE.jar、org.springframework.beans-3.0.0.RELEASE.jar、org.springframework.context-3.0.0.RELEASE.jar、org.springframework.core-3.0.0.RELEASE.jar、org.springframework.expression-3.0.0.RELEASE.jar、org.springframework.jdbc-3.0.0.RELEASE.jar、org.springframework.orm-3.0.0.RELEASE.jar、org.springframework.transaction-3.0.0.RELEASE.jar 除了要上述包之外,还需要加入commons-collections-3.2.1.jar(对JDK的集合增强),commons-logging-1.1.1.jar,commons-logging-api-1.1.1.jar(日志记录),aopalliance.jar(aop切面jar.如果缺少会报错),jta-1.1.jar(Java事务),javassist-3.9.0.GA.jar(反编译.class文件快速动态生成类),把所有包都加入到lib后之前出现因为缺少包的错误信息就会消失,然后在applicationContext.xml文件中加入以下内容:
<context:annotation-config /> <context:component-scan base-package="org.lxh" /> <tx:annotation-driven transaction-manager="hibernateTransactionManager" /> <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean>
context:annotation-config:是把Spring的Annotation(JPA)进行自动解释,
context:component-scan base-package="org.lxh" : 是对包的扫描,如果已经写了这个标签的话上面的context:annotation-config是可以不用再写入
hibernateTransactionManager:是我们BasicSupportDao注解中Resource所指向的id;这里先解释下Spring中几种常用的注解:
@Repository用于标注数据访问组件,即DAO组件
@Service用于标注业务层组件,即Service层
@Controller用于标注控制层组件(如struts中的action)
@Component泛指组件,当组件不好归类的时候可以使用这个注解进行标注
@Resource根据指定的名称进行反射获取所指向的bean
@Autowired对类成员变量、方法及构造函数进行标注,完成自动装配的工作
@Repository、@Service、@Component、@Service一般放在class上面进行注解,@Resource、@Autowired一般最好放在setter中,这样的话可以不会破坏其私有属性的,如果放在属性中的话会利用反射机制去获取对象。
Spring的配置完毕之后,接下来就是Service层的实现了Service层的设置就比较简单了,只是针对某个ORM进行,下面只是给出Service实现模块代码:
/** * 文件名:UserServiceImpl.java * * 版本信息: * 日期:2010-2-12 * Copyright 足下 Corporation 2010 * 版权所有 * */ package org.lxh.service.impl; import java.io.Serializable; import java.util.List; import javax.annotation.Resource; import org.lxh.bean.User; import org.lxh.dao.interfaces.BasicDaoIf; import org.lxh.service.interfaces.UserServiceIf; import org.springframework.stereotype.Service; @Service("userService") public class UserServiceImpl implements UserServiceIf { private BasicDaoIf<User, Integer> basicDao; public BasicDaoIf<User, Integer> getBasicDao() { return basicDao; } @Resource(name="basicDao") public void setBasicDao(BasicDaoIf<User, Integer> basicDao) { this.basicDao = basicDao; } @Override public boolean clearAllUser(User user) { return basicDao.deleteAll(user); } @Override public boolean clearUserById(Integer id) { return basicDao.deleteById(User.class, id); } @Override public List<User> listAllUser() { return basicDao.findAll(User.class); } @Override public User listUserById(Integer id) { return basicDao.findById(User.class, id); } @Override public boolean modifyUser(User user) { return basicDao.update(user); } @Override public boolean newUser(User user) { return basicDao.save(user); } }
在Service层中一般是要加上事务处理的,这里就偷了个懒,处理事务一般可以使用Spring自带的JPA实现使用@Transmission注解就可以了,而捕捉异常的话可以在Service层中加入TryCatch选项,BasicDaoIf<User, Integer> basicDao; 中的泛型约束是指当前的实体User,主键类型是Integer类型,一一对应于BasicDaoIf中的<T,t,PK extends Serializable>.创建完成后这样一个完整的Spring+Hibernate的基本的CRUD模块就实现完成了.