@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;
posted @ 2022-04-17 15:42  不忘初心2021  阅读(215)  评论(0)    收藏  举报