偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Spring竟然支持這么多數(shù)據(jù)類型的注入方式!

開(kāi)發(fā) 前端
使用@Lazy注解后,注入的將會(huì)是一個(gè)代理對(duì)象,只有真正使用到的時(shí)候才會(huì)去真實(shí)的獲取具體的bean。

環(huán)境:Spring5.3.23

1. Optional

該類是java1.8提供,java.util.Optional<T>。

static class CommonDAO {
}
static class CommonService {
  @Resource
  private Optional<CommonDAO> optional ;
  @Override
  public String toString() {
    return "CommonService [optional=" + optional.orElseGet(() -> null) + "]";
  }
}
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CommonDAO.class, CommonService.class)) {
  System.out.println(context.getBean(CommonService.class)) ;
}

輸出

CommonService [optional=xxx.CommonDAO@12d4bf7e]

2. ObjectFactory

該類Spring提供,org.springframework.beans.factory.ObjectProvider

static class CommonService {
  @Resource
  private ObjectProvider<CommonDAO> provider ;
  @Override
  public String toString() {
    return "CommonService [provider=" + provider.getIfAvailable() + "]";
  }
}

輸出

CommonService [provider=xxx.CommonDAO@11a9e7c8]

3. Provider

static class CommonService {
  @Resource
  private javax.inject.Provider<CommonDAO> provider ;
  @Override
  public String toString() {
    return "CommonService [provider=" + provider.get() + "]";
  }
}

輸出

CommonService [provider=xxx.CommonDAO@2f177a4b]

注意:如果你的環(huán)境中沒(méi)有javax.inject.Provider,你需要引入以下包:

<dependency>
  <groupId>javax.inject</groupId>
  <artifactId>javax.inject</artifactId>
  <version>1</version>
</dependency>

4. 數(shù)組

static interface DAO {}
static class DogDAO implements DAO {}
static class CatDAO implements DAO {}
static class CommonService {
  @Resource
  private DAO[] daos ;
  @Override
  public String toString() {
    return "CommonService [daos=" + Arrays.toString(this.daos) + "]";
  }
}

輸出

CommonService [daos=[xxx.DogDAO@4445629, xxx.CatDAO@45b9a632]]

5. Collection集合

static class CommonService {
  @Resource
  private List<DAO> daos ;
  @Override
  public String toString() {
    return "CommonService [daos=" + daos + "]";
  }
}

輸出

CommonService [daos=[xxx.DogDAO@309e345f, xxx.CatDAO@56a6d5a6]]

6. Map集合

static class CommonService {
  @Resource
  private Map<String, DAO> daos ;
  @Override
  public String toString() {
    return "CommonService [daos=" + daos + "]";
  }
}

輸出

CommonService [daos={dataTypeInejctMain.DogDAO=xxx.DogDAO@4445629, dataTypeInejctMain.CatDAO=xxx.CatDAO@45b9a632}]

7. 特殊說(shuō)明

7.1 使用@Value注解

1. 注入普通字面量

static class CommonService {
  @Value("${pack.name}")
  private String name ;


  @Override
  public String toString() {
    return "CommonService [name=" + name + "]";
  }
}
// 注備環(huán)境
pack.name=中國(guó)????

輸出

CommonService [name=中國(guó)????]

2. 根據(jù)SpEL表達(dá)式注入

static class CommonService {
  @Value("#{${pack.name}}")
  private CommonDAO dao ;


  @Override
  public String toString() {
    return "CommonService [name=" + dao + "]";
  }
}
// 注備環(huán)境, 這里是配置的其它bean的名稱
pack.name=commonDao
// 注冊(cè)Bean
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) {
  // ...
  context.registerBean("commonDao", CommonDAO.class) ;
  context.register(CommonService.class) ;
  // ...
  System.out.println(context.getBean(CommonService.class)) ;
}

輸出

CommonService [name=xxx.CommonDAO@29176cc1]

3. 注入基本數(shù)據(jù)

static class CommonService {
  // 會(huì)自動(dòng)將值轉(zhuǎn)換為Integer
  // 只要Spring的類型轉(zhuǎn)換器支持的都可以通過(guò)下面方式注入
  @Value("666")
  private int id ;


  @Override
  public String toString() {
    return "CommonService [id=" + id + "]";
  }
}

輸出

CommonService [id=666]

7.2 使用@Lazy注解

使用@Lazy注解后,注入的將會(huì)是一個(gè)代理對(duì)象,只有真正使用到的時(shí)候才會(huì)去真實(shí)的獲取具體的bean。

static class CommonService {
  @Resource
  @Lazy
  private CommonDAO commonDao ;
  @Override
  public String toString() {
    return "CommonService [commonDao=" + commonDao.getClass() + "]";
  }
}

輸出

CommonService [commonDao=class xxx.CommonDAO$$EnhancerBySpringCGLIB$$39f36385]

以上是本篇文章的全部?jī)?nèi)容,希望對(duì)你有所幫助。

完畢?。?!

責(zé)任編輯:武曉燕 來(lái)源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2023-09-14 08:16:50

Lazy注解null

2019-07-05 15:52:03

數(shù)據(jù)科學(xué)家大數(shù)據(jù)機(jī)器學(xué)習(xí)

2020-06-01 08:04:18

三目運(yùn)算符代碼

2024-04-29 09:38:16

2021-02-03 20:19:08

Istio流量網(wǎng)格

2022-03-03 07:00:43

Mybatiswhere標(biāo)簽

2021-05-11 07:42:59

BeanSpring屬性

2021-06-10 09:00:33

單例模式數(shù)據(jù)庫(kù)

2018-06-05 11:06:05

模塊化數(shù)據(jù)中心管理

2020-12-01 08:19:15

Redis

2021-02-03 08:24:32

JavaScript技巧經(jīng)驗(yàn)

2025-05-26 09:30:00

SQL數(shù)據(jù)庫(kù)索引

2020-07-21 18:37:14

代碼條件變量

2021-05-27 07:54:21

JavaStateAQS

2021-10-11 08:21:23

@Valuespringspring框架

2015-03-27 10:20:41

谷歌地圖谷歌偉大

2012-07-17 09:16:16

SpringSSH

2021-09-03 00:31:17

iPhone手機(jī)截圖

2019-08-12 11:40:48

數(shù)據(jù)庫(kù)SQLite3數(shù)據(jù)類型

2019-12-09 10:13:20

HashMap選擇容量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)