@Service,@Resource和@Qualifier的简单使用
当一条业务线需要多种逻辑时,但是接口已经写好了,如果在接口上新增新的方法,务必使得实现该接口的类又要使用多余的方法,可以使用新的类继承老的类,重写该方法
import com.java.bean.RecyMem;
import com.java.mapper.RecyMemoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author yourheart
* @Description
* @create 2021-05-14 1:02
*/
@Service("adminRecyMemoService")
public class AdminRecyMemoServiceImpl extends UniversalRecyMemoServiceImpl{
@Autowired
private RecyMemoMapper recyMemoMapper;
@Override
public List<RecyMem> getListByUser(String userName, String content) {
if ("tangziwei".equals(userName)){
userName="";
}
RecyMem recyMem=new RecyMem();
recyMem.setRecycledMemoContent(content);
recyMem.setUser(userName);
List<RecyMem> listByUser = recyMemoMapper.getListByUser(recyMem);
return listByUser;
}
}
import com.java.bean.PrivateMemo;
import com.java.bean.PumBean;
import com.java.bean.RecyMem;
import com.java.bean.ResponseBean;
import com.java.enums.MemoEnum;
import com.java.mapper.PumMapper;
import com.java.mapper.RecyMemoMapper;
import com.java.service.PrivateMemoService;
import com.java.service.RecyMemoService;
import com.java.utils.TimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description
* @Author qiuxie
* @Date 2021/7/1 7:52
*/
@Service("universalRecyMemoServiceImpl")
@Slf4j
public class UniversalRecyMemoServiceImpl implements RecyMemoService {
@Autowired
private RecyMemoMapper recyMemoMapper;
@Autowired
private PumMapper pumMapper;
@Autowired
private PrivateMemoService privateMemoService;
@Override
public List<RecyMem> getListByUser(String userName, String content) {
return null;
}
@Override
public ResponseBean recoverMemo(String id, String userName) {
RecyMem recyMem = recyMemoMapper.getOne(id);
ResponseBean responseBean = new ResponseBean();
if (MemoEnum.PUBLIC_MEMO.getCode().equals(recyMem.getSign())) {
//公有备忘录
PumBean pumBean = new PumBean();
pumBean.setMemoContent(recyMem.getRecycledMemoContent());
pumBean.setPublicMemoUser(recyMem.getUser() == null ? userName : recyMem.getUser());
pumBean.setMemoTime(recyMem.getRecycledMemoOperateTime() == null ? TimeUtils.getTime() : recyMem.getRecycledMemoOperateTime());
pumBean.setMemoOperateTime(recyMem.getRecycledMemoOperateTime() == null ? TimeUtils.getTime() : recyMem.getRecycledMemoOperateTime());
int addPublicMemo = pumMapper.addPublicMemo(pumBean);
if (addPublicMemo == 0) {
responseBean.setCode("-100");
responseBean.setMsg("公有备忘录数据恢复失败");
log.info("responseBean:{}", responseBean);
return responseBean;
}
int delets = recyMemoMapper.delets(String.valueOf(recyMem.getId()));
if (delets == 0) {
responseBean.setCode("-101");
responseBean.setMsg("回收站公有备忘录数据删除失败");
log.info("responseBean:{}", responseBean);
return responseBean;
}
responseBean.setCode("100");
responseBean.setMsg("公有备忘录数据恢复成功");
log.info("responseBean:{}", responseBean);
return responseBean;
} else {
//私有备忘录
PrivateMemo privateMemo = PrivateMemo.builder().content(recyMem.getRecycledMemoContent()).updatePrivateMemoTime(recyMem.getRecycledMemoOperateTime() == null ? TimeUtils.getTime() : recyMem.getRecycledMemoOperateTime()).addPrivateMemoTime(recyMem.getRecycledMemoOperateTime() == null ? TimeUtils.getTime() : recyMem.getRecycledMemoOperateTime()).addUser(recyMem.getUser() == null ? userName : recyMem.getUser()).build();
ResponseBean bean = privateMemoService.addMemo(privateMemo);
log.info("【私有备忘录】bean:{}", bean);
if (bean.getCode().equals("-100") || bean.getCode().equals("-101")) {
responseBean.setCode("-102");
responseBean.setMsg("私有备忘录数据恢复失败");
log.info("responseBean:{}", responseBean);
return responseBean;
}
int delets = recyMemoMapper.delets(String.valueOf(recyMem.getId()));
if (delets == 0) {
responseBean.setCode("-103");
responseBean.setMsg("回收站私有备忘录数据删除失败");
log.info("responseBean:{}", responseBean);
return responseBean;
}
responseBean.setCode("101");
responseBean.setMsg("私有备忘录数据恢复成功");
log.info("responseBean:{}", responseBean);
return responseBean;
}
}
}
不同的类在@Service里面写上不同的名字
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.java.bean.RecyMem;
import com.java.mapper.RecyMemoMapper;
import com.java.service.RecyMemoService;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
/**
* 作者 邱燮 时间: 2020/6/15 17:32 描述
*/
@Controller
@RequestMapping("/recyM")
public class RecyMemoController {
private static final Logger logger = LoggerFactory.getLogger(RecyMemoController.class);
@Autowired
private RecyMemoMapper recyMemoMapper;
@Resource(name = "adminRecyMemoService")
private RecyMemoService recyMemoService;
@Resource(name = "universalRecyMemoServiceImpl")
private RecyMemoService resumeMemo;
/**
* 垃圾桶备忘录恢复
* @param idList
* @return
*/
@PostMapping("/resumeMemo")
@ResponseBody
public String resumeMemo(@RequestParam(value = "idList") List<String> idList,HttpSession session){
String user = (String) session.getAttribute("user");
idList.stream().forEach(id->{
resumeMemo.recoverMemo(id,user);
});
return "1";
}
// 查询备忘录回收站中所有内容
@RequestMapping("/RecyledMemo")
public String recyledMemo(Model model,HttpSession session) {
String user = (String) session.getAttribute("user");
List<RecyMem> allRecyMemo =recyMemoService.getListByUser(user,"");
model.addAttribute("total", allRecyMemo.size());
return "recy/GetAllRecyledMemo";
}
@ResponseBody
@RequestMapping("/DataShow3")
public Map<String,Object> fdf(int curr, int limit,String content,HttpSession session){
String user = (String) session.getAttribute("user");
PageHelper.startPage(curr, limit);
List<RecyMem> allRecyMemo =recyMemoService.getListByUser(user,content);
PageInfo<RecyMem> pageInfo = PageInfo.of(allRecyMemo);
Map<String,Object> map=new HashMap<String,Object>();
map.put("data",pageInfo.getList());
map.put("ct",pageInfo.getTotal());
return map;
}
}
不同的名字,使用@Resource中写上对应的名字
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<!-- <version>2.3.4.RELEASE</version>-->
<relativePath/>
</parent>
<groupId>com.java</groupId>
<artifactId>pingan</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>pingan</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
</properties>
<dependencies>
<!--移除tomcat容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--加入undertow-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--实体类字段校验依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--引入thymeleaf依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<!--springboot整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!-- mybatis pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
<!--springboot整合mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.4</version>
</dependency>
<!--引入shiro依赖-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<!--添加fastjson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<!--<version>1.2.7</version>-->
<version>1.2.70</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--腾讯云短信01-->
<!-- https://mvnrepository.com/artifact/com.github.qcloudsms/qcloudsms -->
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.6</version>
</dependency>
<!--阿里云短信接口-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.6</version> <!-- 注:如提示报错,先升级基础包版,无法解决可联系技术支持 -->
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<!--榛子云-->
<dependency>
<groupId>com.zhenzikj</groupId>
<artifactId>zhenzisms</artifactId>
<version>1.0.2</version>
</dependency>
<!-- 热部署模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!--java爬虫需要的jar包-->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.2</version>
</dependency>
<!--判断空的用法 -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!--邮件发送相关依赖三个-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!--Spring Session使得基于Redis的Session共享-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<!--拼音的依赖包-->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<!--springboot整合aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--springboot整合邮件发送-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--ThreadFactoryBuilder的依赖包-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version>
</dependency>
<!--引入jmockit依赖-->
<dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.38</version>
</dependency>
<!--引入junit单元测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>test</finalName>
</build>
</project>
pom文件依赖
对于两个不同的实现类实现了同一个接口,同时可以使用@Qualifier来匹配到我们需要的调用的实现类


其中@Service里面的双引号是给不同的实现类定义的不同的名字,类似xml文件中<bean id="">中的id一样
下面给出如何使用



根据业务需要不同的功能调用对应的接口下不同的实现类,其中引入的包路径是
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
浙公网安备 33010602011771号