Spring中 如果该Service有多个实现类,它怎么知道该注入哪个ServiceImpl类?

1.每个service的impl都可以指定名称(使用@Service(“名称”))

2.Controller中注入service的时候使用名称来指定注入哪一个。

  (1).

  @Autowired   @Qualifier("名称") 

  (2).

  @Resource(name="名称")

代码如下:

接口
public interface HumanService {    public String name();}
接口实现类 
@Service("teacherService")public class TeacherServiceImpl implements HumanService {    @Override    public String name() {        System.out.println("teacher");        return "teacher";    }}

@Service("doctorService")public class DoctorServiceImpl implements HumanService {    @Override    public String name() {        System.out.println("doctor");        return "doctor";    }}
控制器
@RestControllerpublic class HumanController {//    @Resource(name="doctorService")
    @Autowired    @Qualifier("teacherService")    private HumanService humanService;

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

原文地址:https://www.cnblogs.com/zoe-java/p/11530888.html

时间: 2024-11-11 06:00:04

Spring中 如果该Service有多个实现类,它怎么知道该注入哪个ServiceImpl类?的相关文章

关于spring中无法将service注入到servlet中的问题

首先,servlet是动态网页项目区别于普通的java项目的,是动态网页项目中web.xml主要配置文件管理的,而spring只能管理普通的pojo,而没办法直接注入,尽管你的注入方式和配置方式都没有问题.那如何解决这个问题呢?解决的办法总比遇到的问题多,不然spring MVC又是如何做到呢?其实filter也是会遇到类似问题的.个人建议使用第四种方式  第一种解决办法是: 在servlet中的init方法或者是无参构造方法内直接用最原始的方式进行手动注入,即类似如下:WebApplicati

Spring中的注解@Service @Component @Controller @Repository区别

@Service用于标注业务层组件, @Controller用于标注控制层组件(如struts中的action), @Repository用于标注数据访问组件,即DAO组件, @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注. 这四个注解其实都是和Component差不多只是在语义上有些不一样,修饰的方法 请看下面的一个例子 dao层 1 package cn.lonecloud.pagekageauto.dao; 2 3 4 /** 5 * dao层的接口 6

Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件

(1)下边的一个java类包含了所有Map.Set.List.数组.属性集合等这些容器,主要用于演示Spring的注入配置: package com.lc.collection; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class Department { private String name; private String []

Spring中c3p0连接池的配置 及JdbcTemplate的使用 通过XML配置文件注入各种需要对象的操作 来完成数据库添加Add()方法

通过配置文件XML方法的配置 可以使用非常简练的Service类 UserService类代码如下: package com.swift; public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public boolean add() { return userDao.add(); } } UserService

Spring 中的事件机制

说到事件机制,可能脑海中最先浮现的就是日常使用的各种 listener,listener去监听事件源,如果被监听的事件有变化就会通知listener,从而针对变化做相应的动作.这些listener是怎么实现的呢?说listener之前,我们先从设计模式开始讲起. 观察者模式 观察者模式一般包含以下几个对象: Subject:被观察的对象.它提供一系列方法来增加和删除观察者对象,同时它定义了通知方法notify().目标类可以是接口,也可以是抽象类或具体类. ConcreteSubject:具体的

Spring MVC不要在@Service bean中保存状态

先看这么一段代码: @Service public class AccountService { private String message; public void foo1() { if (true) { this.message = "a"; } else { this.message = "b"; } } public void foo2() { // 修改this.message的代码... // ... ... } } 如果你打算在@Controlle

Spring中同一个service中方法相互调用事务不生效问题解决方案

问题描述: 我们在用Spring框架开发Web项目过程中,经常需要用同一个service中的一个方法调用另一个方法,如果此时调用方没有添加事务注解@Transactional,而在被调用方添加事务注解@Transactional,当被调用方法中出现异常,这时候会发现事务并没有回滚,事务注解@Transactional没有起作用. 分析原因: 我们知道Spring中事务管理是使用AOP代理技术实现的,目标对象自身并没有事务管理功能的,而是通过代理对象动态增强功能对事务进行增强的.因此当我们在同一个

Spring中@Transactional事务回滚实例及源码

一.使用场景举例 在了解@Transactional怎么用之前我们必须要先知道@Transactional有什么用.下面举个栗子:比如一个部门里面有很多成员,这两者分别保存在部门表和成员表里面,在删除某个部门的时候,假设我们默认删除对应的成员.但是在执行的时候可能会出现这种情况,我们先删除部门,再删除成员,但是部门删除成功了,删除成员的时候出异常了.这时候我们希望如果成员删除失败了,之前删除的部门也取消删除.这种场景就可以使用@Transactional事物回滚. 二.checked异常和unc

ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题

想要实现的功能:SSH环境下,数据层都交由Spring管理:在服务启动时,将数据库中的一些数据加载到ServletContext中缓存起来. 系统初始化类需要实现两个接口: ServletContextListener,系统初始化时调用contextInitialized方法缓存数据: ApplicationContextAware,获取Spring的ApplicationContext对象,以获取spring容器管理的service对象. 系统初始化类如下: 1 package com.liz