32

@Autowired 简介

@Autowired 注解用于描述类中的属性,构造方法,set方法,配置方法等,用于告诉Spring框架按照指定规则为属性注入值(DI)。

@Autowired 应用入门

基于如下API设计,进行代码实现进而分析@Autowired应用分析。
image

第一步:设计Cache接口

package com.cy.pj.common.cache;
public interface Cache {
 
}

第二步: 设计Cache接口实现类WeakCache,并交给spring管理。

package com.cy.pj.common.cache;
 
import org.springframework.stereotype.Component;
 
@Component
    
public class WeakCache implements Cache{
 
}

第二步: 设计Cache接口实现类SoftCache,并交给spring管理。

package com.cy.pj.common.cache;
 
@Component
public class SoftCache implements Cache{
…
}

第三步:设计单元测试类

package com.cy.pj.common.cache;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
    
public class CacheTests {
    @Autowired
    @Qualifier("softCache")
    private Cache cache;
    
    @Test
    public void testCache() {
        System.out.println(cache);
    }
}

基于单元测试,分析@Autowired应用(底层通过反射技术为属性赋值)。

说明:Spring框架在项目运行时假如发现由他管理的Bean对象中有使用@Autowired注解描述的属性,可以按照指定规则为属性赋值(DI)。其基本规则是:首先要检测容器中是否有与属性类型相匹配的对象,假如有并且只有一个则直接注入。其次,假如检测到有多个,还会按照@Autowired描述的属性名查找是否有名字匹配的对象,有则直接注入,没有则抛出异常。最后,假如我们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还可以使用@Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowired注解使用)。

@Autowired 应用进阶

@Autowired 注解在Spring管理的Bean中也可以描述其构造方法,set方法,配置方法等,其规则依旧是先匹配方法参数类型再匹配参数名,基于如下图的设计进行分析和实现:

image

第一步:定义SearchService类并交给Spring管理

package com.cy.pj.common.service;
@Component
public class SearchService{

  private Cache cache;
  @Autowired
  public SearchService(@Qualifier("softCache")Cache cache){
     this.cache=cache;
  }
  public Cache getCache(){
     return this.cache;
  }
}
@Qualifier可以描述构造方法参数,但不可以描述构造方法。

第二步:定义SearchServiceTests单元测试类。

package com.cy.pj.common.service;
@Component
public class SearchServiceTests{

  private SearchService searchService;
  @Test
  void testGetCache(){
     System.out.println(searchService.getCache())
  }
}
可以尝试在SearchService中添加无参构造函数和setCache(Cache cache)方法,然后使用@Autowired描述setCache方法,并基于@Qualifier注解描述setCache方法参数。分析进行注入过程。

总结(Summary)

本小节讲述了,在Spring框架中使用@Autowired注解描述类中属性、构造方法时的注入规则。然后深入理解其注入过程。


Jason
4.2k 声望17.2k 粉丝

以终为始,闭环迭代,持续提高。