1. 程式人生 > >spring自動裝配和通過java實現裝配

spring自動裝配和通過java實現裝配

ati 三方庫 autowired 模式 限定 程序 str primary java實現

1.組建掃描

在類上添加註解@Component註解可以實現組建掃描

@Component
public class A{
   ...  
}

2.自動裝配

通過在屬性上或者方法上添加@Autowired註解可以實現自動裝配(在單例bean,沒有歧義的情況下)

public class B{
   @Autowired
   private A a;
   ...     
  
}

public class B{
@Autowired
public B(A a){
...
} ... }

3.通過java代碼實現顯示裝配

當使用第三方庫時,無法實現自動裝配,所以需要顯示裝配bean。在配置類中添加@Configuration註解,在方法上添加@Bean註解實現創建bean。

裝配方式一:
@Configuration
public classs C{
   @Bean
   public A getA(){
      return new A();     
   } 

    @Bean
    public B setA(){
      return new B(getA());     
   } 
}

裝配方式二:
@Configuration
public classs C{
   @Bean
   public A getA(){
      return new A();     
   } 

    @Bean
    public B setA(A a){
      
return new B(a); } }

4、自動裝配與歧義性

spring的默認模式是單例模式,只有單例模式時,才可以實現自動裝配。為了處理歧義性,有以下幾種方式:

假設有以下多個bean

@Compant
public class Icecream extend Dessert{...}
@Compant
public class Cookie extend Dessert{...}
@Compant
public class Cake extend Dessert{...}

(1)標識首選Bean

利用@Primary註解

@Component
@Primary
public class Icecream extends Dessert{...}

(2)使用限定符表示不同的bean

@Autowired
@Qualifier("icecream")//這裏使用Icecream類,它的bean的名字默認為類的名字首字母小寫,即“icecream”
private Dessert dessert;

如果要使用自定義的bean的限定符:

定義:
@Component
@Qualifier("cold")
public class Icecream extends Dessert{...}

使用:
@Autowired
@Qualifier("cold")
private Dessert dessert;

5、bean的作用域

包含四種模式:

(1)單例模式:整個應用程序,只建立一個實例bean

(2)原型模式:每次註入或者通過spring上下文獲取的時候,就建立一個實例bean

(3)會話模式:每個會話建立一個實例bean

(4)請求模式:每次請求建立一個實例bean

spring默認情況下,是單例模式,如果要用其他模式,可以用@Scope註解,並且配合@Component和@Bean使用。

@Component
@Scope("prototype")
public class A{
   ...
 }


@Bean
@Scope("prototype")
public A getA(){
    ...  
}

spring自動裝配和通過java實現裝配