创建业务层,声明事务业务层主要处理业务逻辑,提供给web层友好的访问接口和实现访问DAO层。用业务层的另一个好处是,可以适应数据访问层从Hibernate技术转移到其他数据访问技术。 1. 在src/com.jandar.service下新建一个IUserManager接口,该接口有几乎于IUserDAO同样的方法,不同的是处理参数,应为IUserManager是供web层访问的。 public interface IUserManager { User getUser(String userid); List getUsers(); User saveUser(User user); void removeUser(String userid); } 2. 在src/com.jandar.service.spring下新建IuserManager实现类,UserManager.java /* * 创建日期 * * TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */ package com.jandar.service.spring;
import java.util.List;
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
import com.jandar.model.User; import com.jandar.service.IUserManager; import com.jandar.service.dao.IUserDAO;
/** * @author Administrator * * TODO 要更改此生成的类型注释的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */ public class UserManagerImpl implements IUserManager {
/* (非 Javadoc) * @see com.jandar.service.IUserManager#getUser(java.lang.String) */ private static Log log=LogFactory.getLog(UserManagerImpl.class); public IUserDAO userDao;
/** * @return 返回 userDao。 */ public IUserDAO getUserDao() { return userDao; } /** * @param userDao 要设置的 userDao。 */ public void setUserDao(IUserDAO userDao) { this.userDao = userDao; } public User getUser(String userid) {
User user=userDao.getUser(Integer.valueOf(userid)); if(user==null){ log.warn(" user id "+userid+" not found in database"); } if(log.isDebugEnabled()){ log.debug("get a user with id "+userid); } return user; }
/* (非 Javadoc) * @see com.jandar.service.IUserManager#getUsers() */ public List getUsers() { // TODO 自动生成方法存根 return userDao.getUsers(); }
/* (非 Javadoc) * @see com.jandar.service.IUserManager#saveUser(com.jandar.model.User) */ public User saveUser(User user) { // TODO 自动生成方法存根 userDao.saveUser(user); return user; }
/* (非 Javadoc) * @see com.jandar.service.IUserManager#removeUser(java.lang.String) */ public void removeUser(String userid) { // TODO 自动生成方法存根 userDao.removeUser(Integer.valueOf(userid));
}
} UserManager.java通过访问dao接口实现业务逻辑和数据库操作。同时该类中提供了set方法,运用了Spring的依赖注入机制。但尚未使用spring的AOP和声明事务。 配置applicationContext.xml在WEB-INF 下新建applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"><value>org.hsqldb.jdbcDriver</value></property> <property name="url"><value>jdbc:hsqldb:db/appfuse</value></property> <property name="username"><value>sa</value></property> <!-- Make sure <value> tags are on same line - if they‘re not, authentication will fail --> <property name="password"><value></value></property> </bean>
<!-- Hibernate SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"><ref local="dataSource"/></property> <property name="mappingResources"> <list> <value>com/jandar/model/User.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop> <prop key="hibernate.hbm2ddl.auto">create</prop> </props> </property> </bean>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean>
<bean id="userDAO" class="com.jandar.dao.hibernate.UserDAOHibernate"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean>
<bean id="userManagerTarget" class="com.jandar.service.spring.UserManager"> <property name="userDAO"><ref local="userDAO"/></property> </bean>
<bean id="userManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref local="transactionManager"/></property> <property name="target"><ref local="userManagerTarget"/></property> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean>
</beans> |
|