service層的抽取和dao層的抽取差不多相同,主要不同點是dao例項化的問題,需要在呼叫時傳入,並在BaseServiceImpl接收。
詳細的過程說明請參考dao層的抽取。
dao層的抽取:http://blog.csdn.net/u011997561/article/details/79109293

1.抽取前的 UserService 介面

package com.storm.user.service;

import com.github.pagehelper.PageInfo;
import com.storm.base.service.IBaseService;
import com.storm.user.entity.User;
import java.io.Serializable;
import java.util.List;

public interface UserService{

    int insert(User user);//增加

    int delete(Serializable id);//刪除

    int update(User user);//修改

    User findById(Serializable id);//查詢

}

2.抽取前 UserServiceImpl 實現類

package com.storm.user.service;

/**
 * 使用者業務處理類
 *
 * @author zzz
 * @date 2018-01-19
 */
@Service("userService")
public class UserServiceImpl implements UserService{

    @Autowired
    private UserDao userDao;

    public int insert(User user){
        return userDao.insert(user);
    }

    public int delete(Serializable id){
        return userDao.delete(id);
    }

    public int update(User user){
        return  userDao.update(user);
    }

    public User findById(Serializable id){
        return userDao.findById(id);
    }

}

3.建立 BaseService 介面

package com.storm.base.service;

/**
 * service 基類
 * @param <E> 實體物件型別
 *
 * @author zzz
 * @date 2018-01-19
 */
public interface IBaseService<E,PK extends Serializable> {

    int insert(E entity);//增加

    int delete(Serializable id);//刪除

    int update(E entity);//修改

    User findById(Serializable id);//查詢
}

4.建立 BaseService實現類

package com.storm.base.service;

/**
 * service 基類
 *
 * @param <E>  實體物件
 * @param <PK> 主鍵型別
 *
 * @author zzz
 * @date 2018-01-19
 */
public abstract class BaseServiceImpl<E, PK extends Serializable> implements IBaseService<E, PK> {

    /**
     * 獲取 dao 物件
     * @return
     */
    protected abstract BaseDao<E, PK> getDao();

    public int insert(E entity);//增加

    public int delete(Serializable id);//刪除

    public int update(E entity);//修改

    public E findById(Serializable id);//查詢

}

5.UserService 繼承 BaseService

package com.storm.user.service;

public interface UserService extends IBaseService<User,Long>{

    //去掉原來的程式碼

    void dealUserData(User user);

}

6.UserServiceImpl 繼承 BaseServiceImpl

package com.storm.user.service;

/**
 * 使用者業務處理類
 *
 * @author zzz
 * @date 2018-01-19
 */
@Service("userService")
public class UserServiceImpl extends BaseServiceImpl<User,Long> implements UserService{

    @Autowired
    private UserDao dao;

    protected UserDao getDao() {
        return dao;
    }

    //可以新增其他的業務處理方法,通用的CRUD方法可以直接呼叫 BaseService 中的方法

    public void dealUserData(User user){

    }

}

<完>