Spring裝配Bean(一)
三種bean的裝配機制
* xml中配置
* java中進行顯式配置
* 隱式的bean發現機制和自動裝配
自動化裝配bean
Spring從兩個角度來實現自動化裝配:
* 元件掃描(component scanning) : Spring 會自動發現應用上下文中建立的bean
* 自動裝配(autowiring): Spring自動滿足bean之間的依賴
1. 建立可以被發現的bean
舉個例子:建立一個類,Spring會發現它並加其建立為一個bean,然後建立另一個bean,並注入到前面bean中 。
package com.erong.interface_;
public interface CompactDisc {
void play();
}
package com.erong.service;
import org.springframework.stereotype.Component;
import com.erong.interface_.CompactDisc;
@Component
public class SgtPeppers implements CompactDisc {
private String title = "Sgt.Pepper's Hearts Club Band ";
private String artist = "The Beatles";
@Override
public void play() {
System.out.println("Playin "+title+" by "+artist);
}
}
@Component註解,表示該類作為元件類,並告知Spring要為這個類建立bean
package com.erong.service;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
@ComponentScan註解,能夠在Spring中啟用元件掃描,沒有其他配置的話,預設掃描和配置類相同的包,找到@Component的類,並建立一個bean。
如果使用xml來啟用元件掃描的話,使用Spring context名稱空間的<context:component-scan basepackage="com.long">元素,basepackage設定掃描的路徑
package com.erong.service;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.erong.interface_.CompactDisc;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
@Autowired
private CompactDisc cpd;
@Test
public void test(){
Assert.assertNotNull(cpd);
}
}
CDPlayerTest 使用了Spring的SpringJUnit4ClassRunner,以便在測試開始的時候自動建立Spring應用的上下文
註解@ContextConfiguration會告訴需要在CDPlayerConfig中載入配置,從而找到@Component的bean,並建立。
2. 為元件掃描的bean命名
Spring上下文中所有的bean都會給定義一個id,如果給掃描的bean也定義一個唯一id
@Component(value="sgtp") 或者使用Java依賴注入規範@Named註解來為bean設定id
Note:Spring支援@Named作為@Component替換,只有細微查詢,大多數情況可以互換
3. 設定元件掃描的基礎包
@ComponentScan的value屬性中指定包的名稱
@ComponentScan(value="com.test")
如果需要配置多個基礎包,basePackages配置
@ComponentScan(basePackages={"com.erong","com.test"})
除了將包設定為簡單的String型別之外,@ComponentScan指定為包中包含的類或者介面
@ComponentScan(basePackageClasses={com.erong.service.SgtPeppers.class})
4. 通過為bean新增註解實現自動裝配
自動裝配:在Spring上下文中尋找匹配某個bean需求的其他bean。
* Autowire註解
1> 構造器上新增了@Autowired註解,表示建立物件的時候,自動傳入一個bean
@Autowired
public CDPlayer(CompactDisc cd){
this.cd = cd;
}
2> 用在屬性的setter方法上
@Autowired
public void setCd(CompactDisc cd) {
this.cd = cd;
}
實際上,如果存在一個insertDisc方法,也可以使用@Autowire將bean注入
Note:
1> 不管是構造器、setter方法還是其他的方法,對於Autowire Spring都會嘗試滿足方法引數上宣告的依賴.
2> 對於Autowire註解,假如只有一個bean,就會注入一個,存在多個就會拋異常
3> Spring上下文中不存在匹配的bean,那麼在建立Spring上下文的時候,Spring將丟擲異常,為了避免異常的出現,將@Autowire的 required屬性設定為false
4> @Inject註解替換@Autowire,大多數場景可以互換。
相關文章
- Spring IOC 一——Spring容器裝配BeanSpringBean
- Spring bean 裝配SpringBean
- Spring裝配Bean(四)SpringBean
- Spring裝配Bean(二)SpringBean
- 二、Spring裝配BeanSpringBean
- 初識Spring —— Bean的裝配(一)SpringBean
- Spring裝配Bean(六)Bean的作用域SpringBean
- 初識Spring —— Bean的裝配(二)SpringBean
- Spring裝配Bean(七) Spring的執行時注入SpringBean
- Spring-04 Bean的自動裝配SpringBean
- Spring入門(二):自動化裝配beanSpringBean
- Spring入門(三):通過JavaConfig裝配beanSpringJavaBean
- bean 的自動裝配Bean
- SpringBoot(14)—註解裝配BeanSpring BootBean
- spring裝配Spring
- Spring 框架基礎(02):Bean的生命週期,作用域,裝配總結Spring框架Bean
- Bean的自動裝配及作用域Bean
- Spring裝配Bean(五)profile註解和解決自動注入的歧義性SpringBean
- Spring自動裝配BeansSpringBean
- Spring Bean 的一生SpringBean
- Spring Bean的3種裝配方式SpringBean
- [Spring]BeanSpringBean
- Spring Boot 自動裝配原理Spring Boot
- Spring Framework 條件裝配 之 @ConditionalSpringFramework
- 2、spring注入及自動裝配Spring
- Spring Bean容器SpringBean
- 【Spring】Bean管理SpringBean
- spring註解開發(一)Bean注入SpringBean
- SpringBoot自動裝配原理之Configuration以及@Bean註解的使用Spring BootBean
- 探索Spring系列(一)Spring容器和Bean的生命週期SpringBean
- Spring Bean 綜述SpringBean
- Spring Bean作用域SpringBean
- spring boot factory beanSpring BootBean
- 淺談Spring BeanSpringBean
- Spring基礎(Bean)SpringBean
- Spring Bean 詳解SpringBean
- 聊一聊Spring Bean 的生命週期SpringBean
- Spring原始碼:bean的生命週期(一)Spring原始碼Bean