@Service,@Resource和@Qualifier的简单使用

当一条业务线需要多种逻辑时,但是接口已经写好了,如果在接口上新增新的方法,务必使得实现该接口的类又要使用多余的方法,可以使用新的类继承老的类,重写该方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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;
    }
 
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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里面写上不同的名字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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中写上对应的名字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
<?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 @   不忘初心2021  阅读(181)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示