service层的抽取和dao层的抽取差不多相同,主要不同点是dao实例化的问题,需要在调用时传入,并在BaseServiceImpl接收。 详细的过程说明请参考dao层的抽取。 dao层的抽取:http://blog.csdn.net/kyle0349/article/details/51914504
package cn.tax.nsfw.user.service; import java.io.FileInputStream; import java.io.Serializable; import java.util.List; import cn.tax.nsfw.user.entity.User; public interface UserService { public void save(User user);//保存 public void delete(User user);//删除用户 public void update(User user);//更新用户 public User findById(Serializable id);//根据主键查找用户 public List<User> getAll();//查看所有 public List<User> findLike(User user);//模糊查询 public User findByName(String userName);//根据用户名查询 保证用户名唯一 }
package cn.tax.nsfw.user.service.impl; import java.io.FileInputStream; import java.io.IOException; import java.io.Serializable; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import cn.tax.nsfw.user.dao.UserDao; import cn.tax.nsfw.user.entity.User; import cn.tax.nsfw.user.service.UserService; @Service("userService") public class UserServiceImpl implements UserService { @Resource private UserDao userDao; public void save(User user) { userDao.save(user); } public void delete(User user) { userDao.delete(user); } public void update(User user) { userDao.update(user); } public User findById(Serializable id) { return userDao.findById(id); } public List<User> getAll() { return userDao.getAll(); } public List<User> findLike(User user) { return userDao.findLike(user); } public User findByName(String userName) { return userDao.findByName(userName); } }
package cn.tax.core.service; import java.io.Serializable; import java.util.List; public interface BaseService<T> { public void save(T entity);// 保存 public void delete(T entity);// 删除用户 public void update(T entity);// 更新用户 public T findById(Serializable id);// 根据主键查找用户 public List<T> getAll();// 查看所有 }
注意: 这里我们需要用到userDao,而在这不能直接实例化userDao, 所以需要加一个set方法,在调用service层的时候,把userDao传进来 用BaseDao接收userDao是没问题的。
package cn.tax.core.service.impl; import java.io.Serializable; import java.util.List; import cn.tax.core.dao.BaseDao; import cn.tax.core.service.BaseService; public class BaseServiceImpl<T> implements BaseService<T> { private BaseDao<T> baseDao; public void setBaseDao(BaseDao<T> baseDao) { this.baseDao = baseDao; } public void save(T entity) { baseDao.save(entity); } public void delete(T entity) { baseDao.delete(entity); } public void update(T entity) { baseDao.update(entity); } public T findById(Serializable id) { return baseDao.findById(id); } public List<T> getAll() { return baseDao.getAll(); } }
可以把BaseService中有的方法在UserService注释掉(删除)
package cn.tax.nsfw.user.service; import java.io.FileInputStream; import java.io.Serializable; import java.util.List; import cn.tax.core.service.BaseService; import cn.tax.nsfw.user.entity.User; public interface UserService extends BaseService<User> { /*public void save(User user);//保存 public void delete(User user);//删除用户 public void update(User user);//更新用户 public User findById(Serializable id);//根据主键查找用户 public List<User> getAll();//查看所有 */ //以下两个方法是根据业务需要新增的方法, //可以看到抽取完BaseService后,service层只剩下新增的业务,比较简洁 public List<User> findLike(User user);//模糊查询 public User findByName(String userName);//根据用户名查询 保证用户名唯一 }
同样可以把BaseServiceImpl中有的方法在UserServiceImpl中注释掉(删除) 注意:
package cn.tax.nsfw.user.service.impl; import java.io.FileInputStream; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import cn.tax.core.service.impl.BaseServiceImpl; import cn.tax.nsfw.user.dao.UserDao; import cn.tax.nsfw.user.entity.User; import cn.tax.nsfw.user.service.UserService; @Service("userService") public class UserServiceImpl extends BaseServiceImpl<User> implements UserService { private UserDao userDao; @Resource public void setUserDao(UserDao userDao) { this.userDao = userDao; super.setBaseDao(userDao); } /*public void save(User user) { userDao.save(user); } public void delete(User user) { userDao.delete(user); } public void update(User user) { userDao.update(user); } public User findById(Serializable id) { return userDao.findById(id); } public List<User> getAll() { return userDao.getAll(); }*/ public List<User> findLike(User user) { return userDao.findLike(user); } public User findByName(String userName) { return userDao.findByName(userName); } }