spring自動裝配和通過java實現裝配
阿新 • • 發佈:2019-01-21
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 @Primarypublic 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實現裝配