Springboot中Service+ServiceImpl的结构解析

为解决移植性问题而设计的


一开始大多数项目都是直接在业务处理层的Service类中嵌入JDBC代码,这就使得这个Service类与数据库紧藕合,在换一种数据库后,就要修改Service类中的sql。于是就有了controller+service+serviceImpl;  Service类设计成一个接口,使控制层只依赖这个接口;这样,当某天这个应用要跑在其它数据库上时,就而只需要增加一个serviceImpl类。

项目结构如下:

具体代码如下:

PersonService
package com.service.serviceimpldemo.Service;

/**
 * description:
 * author: 
 */
public interface PersonService {
    public String name();
}
WomanServiceImpl
package com.service.serviceimpldemo.Service.impl;

import com.service.serviceimpldemo.Service.PersonService;
import org.springframework.stereotype.Service;

/**
 * description:
 * author:
 */
@Service("womanService")
public class WomanServiceImpl implements PersonService {
    @Override
    public String name(){
        return "Woman";
    }
}
ManServiceImpl
package com.service.serviceimpldemo.Service.impl;

import com.service.serviceimpldemo.Service.PersonService;
import org.springframework.stereotype.Service;

/**
 * description:
 * author: 
 */
@Service("manService")
public class ManServiceImpl implements PersonService {
    @Override
    public String name(){
     return "Man";
    }
}
PersonController
package com.service.serviceimpldemo.Controller;

import com.service.serviceimpldemo.Service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * description:
 * author: 
 */
@RestController
public class PersonController {
    @Autowired
    
    //如果该Service有多个实现类,设置注入哪个ServiceImpl类
    @Qualifier("womanService")
    private PersonService personService;

    @RequestMapping("/name.do")
    public String name(){
        return personService.name();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章