@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;