【Spring实战】高级装配

1.处理自动装配的歧义性

 

自动装配的时候,仅有一个bean匹配所需的结果时,自动装配才是最有效的,如果不仅有一个Bean能够匹配结果的话,这种歧义性会阻碍Spring自动装配属性、构造参数或者方法参数。如上图所示

当确实发生歧义性的时候,Spring提供了多种可选方案来解决这样的问题。你可以将可选Bean中的某一个设为首选(primary)的bean,或者使用限定符(qualifier)来帮助Spring将可选bean的范围到只有一个Bean。

1.1标示首选的bean

@Primary能够与@Component组合用在组件扫描的bean上,也可以与@Bean组合用在Java配置的bean声明中。

如下图所示距离

 1.2限定自动装配的bean

@Qualifier注解是使用限定符的主要方式。它可以与@Autowired和@Inject协同使用,在注入的时候指定想到注入进去的是哪个bean

如图所示

为限定符@Qualifier注解所设置的参数就是想要注入的bean的ID。所有使用@Component注解声明的类都会创建为bean,并且Bean的ID的首字母变为小写的类名。

但是会存在一些问题,如下图所示

 

2.bean的作用域

在默认情况下,Spring应用上下文所有的Bean都是作为以单例的形式创建的。

Spring中定义了多种作用域,可以基于这种作用域创建bean

包括:

  1. 单例——在整个应用中只创建一个bean
  2. 原型——每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean的实例。
  3. 会话——在web应用中,为每个会话创建一个实例
  4. 请求——在web应用中,为每个请求创建一个bean的实例。

如果你是用组件扫描发现和声明Bean,那么你可以在Bean的类上使用@Scope注解将其声明为原型bean,如下图所示

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章