業(yè)務層主要處理業(yè)務邏輯,提供給web層友好的訪問接口和實現(xiàn)訪問DAO層。用業(yè)務層的另一個好處是,可以適應數(shù)據(jù)訪問層從Hibernate技術轉移到其他數(shù)據(jù)訪問技術。
1. 在src/com.jandar.service下新建一個IUserManager接口,該接口有幾乎于IUserDAO同樣的方法,不同的是處理參數(shù),應為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實現(xiàn)類,UserManager.java
/*
* 創(chuàng)建日期
*
* 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接口實現(xiàn)業(yè)務邏輯和數(shù)據(jù)庫操作。同時該類中提供了set方法,運用了Spring的依賴注入機制。但尚未使用spring的AOP和聲明事務。
在WEB-INF 下新建applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/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>