Spring 依赖搜索

Spring 依赖搜索即在开发过程中通过 Spring的依赖注入机制,对所需求的Bean进行查找。

下面通过一个例子来学习一下。

首先定义一个接口

public interface HelloService {
    void sayHello();
}

然后接口有两个实现,并通过@Component 注解实例化到Spring容器中

@Component
public class TomHelloServiceImpl implements HelloService {
    @Override
    public void sayHello() {
        System.out.println("Hello Tom");
    }
}
@Component
public class JerryHelloServiceImpl implements HelloService {
    @Override
    public void sayHello() {
        System.out.println("Hello Jerry");
    }
}

在控制器中注入

@RestController
public class HelloController {
    
    //注入全部的 HelloService 接口的实现
    @Autowired 
    List<HelloService> helloServiceList;
    
    //注入Bean的名字为 jerryHelloServiceImpl 的HelloService 接口的实现
   @Autowired
    HelloService jerryHelloServiceImpl;
    
    //key为Bean的名字
    @Autowired
    Map<String, HelloService> helloServiceMap;

    @GetMapping("/hello")
    public void HelloController(){

        for (HelloService helloService : helloServiceList) {
            helloService.sayHello();
        }
        
        //遍历map
        Set<Map.Entry<String,HelloService>> entrySet = helloServiceMap.entrySet();
        Iterator<Map.Entry<String, HelloService>> it2 = entrySet.iterator();
        while(it2.hasNext()){
            Map.Entry<String, HelloService> entry = it2.next();
            String key = entry.getKey();
            HelloService helloService = entry.getValue();
            System.out.println(key+": "+helloService);
        }

        //依赖搜索
        HelloService tom = helloServiceMap.get("tomHelloServiceImpl");
        tom.sayHello();

    }

输出日志

Hello Jerry
Hello Tom
jerryHelloServiceImpl: com.springboot.security02.service.JerryHelloServiceImpl@9f46d94
tomHelloServiceImpl: com.springboot.security02.service.TomHelloServiceImpl@18cc679e
Hello Tom
Hello Jerry

从输出日志我们可以看到,通过@Autowired 注解,如果指定了Bean的名字,则会注入该Bena,没有指定的话 Spring 会把所有HelloService接口的实现全部注入进来,如果注入到 Map 中的话,则 key是Bean的名字,value是Bean实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值