为什么要抽离
面向接口编程。定义一系列的公用接口,多子类实现,便于以后扩展。
如何抽离
1.抽离前UserService接口
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);//根据用户名查询 保证用户名唯一
}
2.抽取前UserServiceImpl
@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);
}
3.创建BaseService
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();// 查看所有
}
4.创建BaseServiceImpl
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();
}
5.UserService继承BaseService(把BaseService中的有的方法在UserService注释掉)
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);//根据用户名查询 保证用户名唯一
}
总结
简单的抽离就是如此,但是真正有些不同的地方还需要结合具体项目来看,不断学习,一直前进~