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

Spring依賴注入@Autowried的這些功能你都知道嗎?

開發 前端
@Autowried注解首先根據byType注入,如果有多個的情況會按照byName注入,如果沒有符合的名稱那么系統將會報錯。結合@Qualifier限定注入的Bean。

[[413925]]

環境:spring5.2.15

@Autowried注解首先根據byType注入,如果有多個的情況會按照byName注入,如果沒有符合的名稱那么系統將會報錯。結合@Qualifier限定注入的Bean。

功能1

  • As of Spring Framework 4.3, an @Autowired annotation on such a constructor is no longer necessary if the target bean defines only one constructor to begin with. However, if several constructors are available and there is no primary/default constructor, at least one of the constructors must be annotated with @Autowired in order to instruct the container which one to use.

大意: 從spring4.3開始,如果目標bean只定義了一個構造函數,則不再需要在這樣的構造函數上使用@Autowired注釋。但是,如果有多個構造函數可用,并且沒有主/默認構造函數,則必須至少用@Autowired對其中一個構造函數進行注釋,以便指示容器使用哪個構造函數。

示例:

  1. public class SimpleMovieLister { 
  2.   private MovieFinder movieFinder; 
  3.  
  4.   @Autowired 
  5.   public void setMovieFinder(MovieFinder movieFinder) { 
  6.     this.movieFinder = movieFinder; 
  7.   } 

功能2

@Autowired可以將注釋應用于具有任意名稱和多個參數的方法

示例:

  1. public class MovieRecommender { 
  2.  
  3.   private MovieCatalog movieCatalog; 
  4.  
  5.   private CustomerPreferenceDao customerPreferenceDao; 
  6.  
  7.   @Autowired 
  8.   public void prepare(MovieCatalog movieCatalog,CustomerPreferenceDao customerPreferenceDao) { 
  9.     this.movieCatalog = movieCatalog; 
  10.     this.customerPreferenceDao = customerPreferenceDao; 
  11.   } 

功能3

可以將@Autowired應用于字段,甚至可以將其與構造函數混合使用

  1. public class MovieRecommender { 
  2.   private final CustomerPreferenceDao customerPreferenceDao; 
  3.  
  4.   @Autowired 
  5.   private MovieCatalog movieCatalog; 
  6.  
  7.   @Autowired 
  8.   public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) { 
  9.     this.customerPreferenceDao = customerPreferenceDao; 
  10.   } 

功能4

可以通過將@Autowired注釋添加到需要該類型數組的字段或方法上

  1. public class MovieRecommender { 
  2.  
  3.   @Autowired 
  4.   private MovieCatalog[] movieCatalogs; 
  5.  

功能5

可以通過將@Autowired注釋添加到需要該類型集合類的字段或方法上

  1. public class MovieRecommender { 
  2.  
  3.   private Set<MovieCatalog> movieCatalogs; 
  4.  
  5.   @Autowired 
  6.   public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) { 
  7.     this.movieCatalogs = movieCatalogs; 
  8.   } 

注意:如果你希望數組或list列表注入的bean具有順序,那么你可以對bean實現Ordered接口或者是使用@Order注解或者標準的 @Priority(JavaEE) 注解。上面的Set不具有順序性

功能6

可以通過將@Autowired注釋添加到Map集合的字段或方法上

  1. public class MovieRecommender { 
  2.  
  3.   private Map<String, MovieCatalog> movieCatalogs; 
  4.  
  5.   @Autowired 
  6.   public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) { 
  7.     this.movieCatalogs = movieCatalogs; 
  8.   } 

這里的key為Bean的名稱。

注意:對于聲明的數組、集合或Map集合,至少需要一個匹配元素,否則會錯誤。

默認情況下使用@Autowired注解意味著是必須具有相應的bean存在,否則程序報錯??梢酝ㄟ^如下方式改變默認行為

  1. public class SimpleMovieLister { 
  2.   private MovieFinder movieFinder; 
  3.   @Autowired(required = false
  4.   public void setMovieFinder(MovieFinder movieFinder) { 
  5.     this.movieFinder = movieFinder; 
  6.   } 

注意:如果這里沒有合適的MovieFinder類型的Bean那么這里的setter方法都不會執行。如果這里是通過構造函數注入,那么即便使用了required = false程序還是會報錯。

功能7

可以通過Java 8的Java.util.Optional來表示特定依賴項的非必需性質

  1. public class SimpleMovieLister { 
  2.   @Autowired 
  3.   public void setMovieFinder(Optional<MovieFinder> movieFinder) { 
  4.   } 

功能8

使用 @Nullable 注解標準非必須依賴項

  1. @Autowired 
  2. public void setMovieFinder(@Nullable MovieFinder movieFinder) { 
  3.   System.out.println("-----movie") ; 
  4.   this.movieFinder = movieFinder; 

功能9

@Autowired可以用于注入 BeanFactory, ApplicationContext, Environment, ResourceLoader, ApplicationEventPublisher, and MessageSource

示例:

  1. @Autowired 
  2. private ApplicationContext context; 

注意:

  • The @Autowired, @Inject, @Value, and @Resource annotations are handled by Spring BeanPostProcessor implementations. This means that you cannot apply these annotations within your own BeanPostProcessor or BeanFactoryPostProcessor types (if any). These types must be 'wired up' explicitly by using XML or a Spring @Bean method.

大意:你不能直接在自定義的BeanPostProcessor或BeanFactoryPostProcessor內使用@Autowired,@Inject,@Value,@Resource注解;必須通過XML或者@Bean 方法的形式進行使用;如果這樣用可能會出現各種奇葩問題,你只需知道不要這么用即可。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2019-02-12 11:15:15

Spring設計模式Java

2024-04-28 08:20:52

Controller接口URL

2021-08-05 18:21:29

Autowired代碼spring

2023-02-15 08:12:19

http超時過濾器

2019-07-08 10:18:38

MPLSIP數據

2021-04-10 07:04:00

WPS技巧辦公軟件

2016-01-11 09:48:07

2016-03-18 19:03:35

認知計算IBM

2022-11-10 09:00:41

2022-09-07 09:01:14

JS操作符運算符

2020-05-27 11:30:54

Chrome DevT前端命令

2023-08-30 07:39:16

PawSQL數據庫

2018-05-15 08:27:20

Scikit-lear機器學習Python

2024-03-26 10:10:45

JavaScript操作符操作表達式

2023-04-28 12:37:59

Spring@Bean使用方式

2023-04-23 09:50:50

@BeanSpring

2020-10-28 11:20:55

vue項目技

2022-05-02 09:17:41

Edge瀏覽器微軟

2023-08-29 09:31:01

Scrapy網頁爬蟲

2018-04-24 15:40:39

無線路由器無線網絡上網
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 浮生影院免费观看中文版 | 久久成人国产精品 | 久久天天躁狠狠躁夜夜躁2014 | 国产精品视频在线播放 | 午夜欧美a级理论片915影院 | 免费观看一级特黄欧美大片 | 91综合网 | 欧美日韩三级 | 欧美综合国产精品久久丁香 | 亚洲精品国产精品国自产在线 | av天天看 | 国产一卡二卡三卡 | 超黄毛片 | 日韩一区二区精品 | 精品国产乱码久久久久久88av | 欧美精品一区三区 | 国产成人网| 欧美日韩在线播放 | 波多野结衣中文视频 | av在线免费观看网址 | 国产99在线 | 欧美 | 亚洲黄色成人网 | k8久久久一区二区三区 | 中文字幕 亚洲一区 | 国产精品a久久久久 | 91视频免费 | 中文二区 | 精品国产一区二区在线 | 毛色毛片免费看 | 日本视频在线 | 天天躁日日躁aaaa视频 | 精品国产1区2区3区 在线国产视频 | av片在线观看网站 | 日韩精品一区二区三区中文在线 | 91精品国产一区二区三区蜜臀 | 国产精品久久久久久久久免费樱桃 | 欧美精品乱码久久久久久按摩 | 九九久久精品 | 看一级毛片 | 成人午夜网站 | 色综合视频 |