java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > @Autowired、@Qualifier和@Primary注解

Spring中的@Autowired、@Qualifier和@Primary注解详解

作者:桐花思雨

这篇文章主要介绍了Spring中的@Autowired、@Qualifier和@Primary注解详解,@Autowired 注解,可以对类成员变量、方法和构造函数进行标注,完成自动装配的工作,@Autowired 是默认根据 byType 进行自动装配的,需要的朋友可以参考下

1. @Autowired 注解

1.1. @Autowired 注解的使用

@Autowired 注解,可以对类成员变量、方法和构造函数进行标注,完成自动装配的工作

1.1.1. 类成员变量上(较为常用)

@Controller
public class SoakController {
 
	@Autowired
	private SoakService soakService;
}

1.1.2. 用在方法上

@Controller
public class SoakController {
 
	private SoakService soakService;
	
	@Autowired 
	public void setSoakService(SoakService soakService) {
		this.soakService = soakService;
	}
}

1.1.3. 用在构造器上

@Controller
public class SoakController {
 
	private SoakService soakService;
	
	@Autowired 
	public SoakController(SoakService soakService) {
		this.soakService = soakService;
	}
}

1.1.4. 用在参数上

@Controller
public class SoakController extends BaseController {
 
	private SoakService soakService;
	
	public SoakController(@Autowired SoakService soakService) {
		this.soakService = soakService;
	}
}

1.2. @Autowired 注解的说明

2. @Autowired 配合 @Qualifier

组件 1

@Service
public class BookService {// 类型为 BookService,name 为 bookService

}

组件 2

@Configuration
public class MainConfigOfAutowired {

	// 类型为 BookService,name 为 bookService01
    @Bean
    public BookService bookService01() {
        return new BookService();
    }
}

测试

@Autowired
@Qualifier("bookService01")
private BookService bookService;

@Test
public void MyTest() {
	System.out.println(bookService);
}

由于容器中存在 bookService01 和 bookService 两个类型相同的组件 bean,那么此时可以使用 @Qualifier(“bookService01”) 明确指定 bean 的 name 后,@Autowired 不再根据 byType 自动装配了,而用 bookService01 作为组件的 name 去容器中查找,找到组件 2,装配成功

3. @Autowired 配合 @Primary

组件 1

@Service
public class BookService { // 类型为 BookService,name 为 bookService

}

组件 2

@Configuration
public class MainConfigOfAutowired {

	// 类型为 BookService,name 为 bookService01
    @Primary
    @Bean
    public BookService bookService01() {
        return new BookService();
    }
}

测试 1

@Autowired
private BookService bookService;

@Test
public void MyTest() {
	System.out.println(bookService);
}

因为组件 2 使用了 @Primary 注解标注,所以 @Autowired 会优先使用 name 为 bookService01 进行装配

测试 2

@Qualifier("bookService")
@Autowired
private BookService bookService;

@Test
public void MyTest() {
	System.out.println(bookService);
}

虽然组件 2 使用了 @Primary 注解标注,但是 @Qualifier 比 @Primary 的优先级要高,所以使用注解 @Qualifier 标注指定后, @Primary 就不起作用了,所以还是直接用指定的 bookService 作为组件的 name 去容器中装配

到此这篇关于Spring中的@Autowired、@Qualifier和@Primary注解详解的文章就介绍到这了,更多相关@Autowired、@Qualifier和@Primary注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文