1. 程式人生 > 程式設計 >Spring裝配bean方法例項總結

Spring裝配bean方法例項總結

一 前言

在XML中進行顯式配置。

在Java中進行顯式配置。

隱式的bean發現機制和自動裝配

關於xml配置不會在本篇說明,有興趣的讀者可以自行了解學習;

二 自動裝配bean

自動裝配Bean主要通過如下兩個方式實現自動裝備bean

  • 元件掃描(component scanning):Spring會自動掃描發現上下文中所建立的bean;對應java配置@ComponentScan註解,其會預設會掃描與配置類相同的包和其子包;如果是xml就是<context:component-scan>
  • 自動裝配(autowiring):Spring自動化管理bean之間的依賴關係;java配置@Autowiring註解,相當於java規範中的@Inject註解;其可以使用在任何類的任何方法上;不建議將required屬性設定為false,否則如果在bean未裝配的情況下就會報空指標異常;
  • @Component註解:賦予spring上下文元件類一個ID;如果不指定value預設就是將類名的第一個字母變為小寫形式;其相當於java規範中的@Name註解;

敲黑板了:

理下思路我們可以通過@Component註解使用在多個類上實現多個bean;然後通過@Autowiring使用在方法上實現bean之間的依賴注入;最後通過@ComponentScan將所有bean掃入spring應用上下文;當然裡面還有許多使用的小細節,要不然很容易出錯;

實現如下

2.1 棉被類

/**
 * @Author lsc
 * <p>棉被 </p>
 */
@Component
public class Quilt {

 // 質量
 private String quality;

 public void product(){
  System.out.println("生產與中國");
 }

// 省略set/get
}

2.2 被單類

/**
 * @Author lsc
 * <p> 被單</p>
 */
@Component//相當於@Component("sheet")
public class Sheet {

 // 顏色
 private String color;
 // 長度
 private String length;


 private Quilt quilt;
 // 使用構造器注入方式將Quilt注入到Sheet,你也可以使用set方式;原則上還可以其它方法
 public Sheet(Quilt quilt){
  this.quilt = quilt;
 }
// 省略set/get

}

2.3被單配置類

/**
 * @Author lsc
 * <p>被單配置類 </p>
 */
@Configuration//告訴spring這是一個配置類
@ComponentScan//這邊的包是com.zszxz.auto 相當於@ComponentScan(basePackages = {"com.zszxz.auto"})
public class SheetConfig {
}

2.4 測試類

/**
 * @Author lsc
 * <p> </p>
 */
@RunWith(SpringJUnit4ClassRunner.class)//建立spring應用上下文
@ContextConfiguration(classes= SheetConfig.class)//載入配置類
public class SheetTest {

 @Autowired
 Sheet sheet;

 @Test
 public void sheetTest(){
  // 生產與中國
  sheet.getQuilt().product();
 }
}

三 java配置

java配置只需要通過如下註解即可完成,通常使用在引入第三方類時;

  • @Configuration註解:告訴spring這是一個配置類
  • @Bean註解:告訴spring這是一個bean,使用在方法上,預設bean的名稱就是方法名也就是前面提到的bean的ID;

思路:@Configuration註解宣告的配置類中使用註解@Bean,就實現了java配置;

3.1 棉類

/**
 * @Author lsc
 * <p>棉 </p>
 */
public class Cotton {

 // 質量
 private String quality;

 public void product(){
  System.out.println("cotton生產與中國");
 }
 // 省略set/get
}

3.2 毛毯

/**
 * @Author lsc
 * <p> 毛毯</p>
 */
public class Blanket {

 // 顏色
 private String color;
 // 長度
 private String length;

 // 構造器注入
 private Cotton cotton;
 @Autowired
 public Blanket(Cotton cotton){
  this.cotton = cotton;
 }
 // 省略set/get
} 

3.3 毛毯配置類

/**
 * @Author lsc
 * <p>毛毯配置類 </p>
 */
@Configuration//告訴spring這是一個配置類,spring會掃描其所有配置納入spring容器
public class BlanketConfig {

 // 將Cotton注入到spring應用上下文
 @Bean
 public Cotton cotton(){
  return new Cotton();
 }

 // 將 Cotton注入到Blanket注入到spring應用上下文
 @Bean
 public Blanket blanket(Cotton cotton){
  return new Blanket(cotton);
 }
}

3.4 測試類

/**
 * @Author lsc
 * <p> </p>
 */
@RunWith(SpringJUnit4ClassRunner.class)//建立spring應用上下文
@ContextConfiguration(classes= BlanketConfig.class)//載入配置類
public class BlanketTest {

 @Autowired
 Blanket blanket;

 @Test
 public void sheetTest(){
  // cotton生產與中國
  blanket.getCotton().product();
 }
}

四 配置結合

使用 @Import 註解能將一個配置類匯入另一個配置類,通常用來合併配置類,下面的示例使用方式更加優雅;

使用示例

/**
 * @Author lsc
 * <p> </p>
 */
@Configuration
@Import({SheetConfig.class,BlanketConfig.class})
public class MergeConfig {
}

測試示例

/**
 * @Author lsc
 * <p> </p>
 */

@RunWith(SpringJUnit4ClassRunner.class)//建立spring應用上下文
@ContextConfiguration(classes= MergeConfig.class)//載入配置類
public class MergeTest {
 @Autowired
 Blanket blanket;

 @Test
 public void sheetTest(){
  // cotton生產與中國
  blanket.getCotton().product();
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。