成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring竟然支持這么多數據類型的注入方式!

開發 前端
使用@Lazy注解后,注入的將會是一個代理對象,只有真正使用到的時候才會去真實的獲取具體的bean。

環境: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]

注意:如果你的環境中沒有javax.inject.Provider,你需要引入以下包:

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

4. 數組

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. 特殊說明

7.1 使用@Value注解

1. 注入普通字面量

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


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

輸出

CommonService [name=中國????]

2. 根據SpEL表達式注入

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


  @Override
  public String toString() {
    return "CommonService [name=" + dao + "]";
  }
}
// 注備環境, 這里是配置的其它bean的名稱
pack.name=commonDao
// 注冊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. 注入基本數據

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


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

輸出

CommonService [id=666]

7.2 使用@Lazy注解

使用@Lazy注解后,注入的將會是一個代理對象,只有真正使用到的時候才會去真實的獲取具體的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]

以上是本篇文章的全部內容,希望對你有所幫助。

完畢!??!

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2023-09-14 08:16:50

Lazy注解null

2019-07-05 15:52:03

數據科學家大數據機器學習

2024-04-29 09:38:16

2021-02-03 20:19:08

Istio流量網格

2020-06-01 08:04:18

三目運算符代碼

2021-06-10 09:00:33

單例模式數據庫

2022-03-03 07:00:43

Mybatiswhere標簽

2018-06-05 11:06:05

模塊化數據中心管理

2021-05-11 07:42:59

BeanSpring屬性

2020-12-01 08:19:15

Redis

2021-02-03 08:24:32

JavaScript技巧經驗

2025-05-26 09:30:00

SQL數據庫索引

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

谷歌地圖谷歌偉大

2021-09-03 00:31:17

iPhone手機截圖

2012-07-17 09:16:16

SpringSSH

2019-12-09 10:13:20

HashMap選擇容量

2019-08-12 11:40:48

數據庫SQLite3數據類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美高清一级片 | 精品久久久久久久久久久久久久 | 91久久久久久久久 | 综合久久99 | 日日操日日干 | 一二三四av| 人成精品 | 欧美激情精品久久久久久 | 韩日精品一区 | 特黄毛片 | 久久av网站 | 欧美成人h版在线观看 | 欧美激情欧美激情在线五月 | 国产99久久久国产精品 | 欧美a在线 | 懂色av一区二区三区在线播放 | 国产精品99免费视频 | 国产精品美女久久久久久免费 | 精品美女久久久 | 精品亚洲一区二区 | 一级在线 | 国产精品a久久久久 | 成人在线观看免费 | 天堂资源最新在线 | 国产精品一区二区三 | 国产精品久久av | 亚洲综合精品 | 精品国产一区二区三区久久狼黑人 | 亚洲一区二区三区四区五区中文 | 日韩在线免费播放 | 国产精品一区视频 | 亚洲性视频 | 日韩精品视频在线观看一区二区三区 | 国产精品久久久久久二区 | 在线视频h | 久久免费精品 | 亚洲成人激情在线观看 | 四虎成人免费视频 | 本道综合精品 | 久久久久国产一级毛片高清网站 | 亚洲欧美日韩一区二区 |