巧用 Spring @Autowired 干掉 else if

本文探讨如何使用Spring的@Autowired注解来消除代码中的else if结构,提高代码的整洁性和可读性。通过详细解释@Autowired的用法,并结合官方文档,展示如何根据bean的名称和类型进行自动注入,从而实现更灵活的依赖注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码可能这样
  public class handler {
  
      void handler(String param){
        if('A'.equals(param)){
            ATestService.do();
        }else if('B'.equals(param){
            BTestService.do();
        }
      }
      
  }

@Autowired用法

@Autowired 官方文档

    private Map<String, MovieCatalog> movieCatalogs;

    @Autowired
    public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) {
        this.movieCatalogs = movieCatalogs;
    }

    // ...

利用这种方式的自动注入,可以将同一个接口的实现bean,注入MapMapkeyBean的名称namevalue为该bean

干掉 else if
// 接口
public interface TestService {
    
    void do();
    
}

// 实现 bean A

@Service("A")
public class  ATestServiceImpl Impl TestService{
    
    void do(){
        ...
    }
}

// 实现 bean B
@Service("B")
public class  BTestServiceImpl Impl TestService{
    
    void do(){
        ...
    }
}

@Component
public class handler {
    
    @Autowired(required = false)
    private Map<String, TestService> services = Maps.newHashMap();


    void handler(String beanName) {
        TestService service =  services.get(beanName);
        service.do();
    
    }

}

其他

当然也可以用其他的方法获取bean来进行解耦,例如继承ApplicationContextAware,通过ApplicationContext#getBeansOfType方法获取bean集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值