日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Spring 應(yīng)用上下文獲取 Bean 的常用姿勢實例總結(jié)

瀏覽:198日期:2023-09-04 18:40:44

本文實例講述了Spring 應(yīng)用上下文獲取 Bean 的常用姿勢。分享給大家供大家參考,具體如下:

1. 前言

通常,在Spring應(yīng)用程序中,當(dāng)我們使用 @Bean,@Service,@Controller,@Configuration 或者其它特定的注解將 Bean 注入 Spring IoC 。然后我們可以使用 Spring 框架提供的 @Autowired 或者 JSR250JSR330 規(guī)范注解來使用由 Spring IoC 管理的 Bean

2. 從應(yīng)用程序上下文中獲取 Bean

今天我們將來學(xué)習(xí)如何從 ApplicationContext 中獲取 Bean 。因為有些情況下我們不得不從應(yīng)用程序上下文中來獲取 Bean

2.1 獲取所有的 Bean

ApplicationContext 提供了獲取所有已經(jīng)成功注入 Spring IoC 容器的 Bean 名稱的方法 getBeanDefinitionNames() 。然后我們可以借助于其 getBean(String name) 方法使用 Bean 名稱獲取特定的 Bean。 我們使用之前文章中介紹的 CommandLineRunner 接口來打印一下結(jié)果。

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; import java.util.stream.Stream; /** * @author Felordcn */ @SpringBootApplication public class WarSpringBootApplication implements CommandLineRunner { @Autowired private ApplicationContext applicationContext; public static void main(String[] args) { SpringApplication.run(WarSpringBootApplication.class, args); } @Override public void run(String... args) throws Exception { String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames(); Stream.of(beanDefinitionNames).forEach(beanName->{ System.out.println('beanName : ' + beanName);Object bean = applicationContext.getBean(beanName);System.out.println('Spring bean : ' + bean); }); } }

運行應(yīng)用會輸出:

2019-11-05 22:15:54.392 INFO 6356 --- [ main] cn.felord.war.WarSpringBootApplication : Started WarSpringBootApplication in 4.663 seconds (JVM running for 7.58) beanName : org.springframework.context.annotation.internalConfigurationAnnotationProcessor Spring bean : org.springframework.context.annotation.ConfigurationClassPostProcessor@6c44052e beanName : org.springframework.context.annotation.internalAutowiredAnnotationProcessor Spring bean : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@5c371e13 beanName : org.springframework.context.annotation.internalCommonAnnotationProcessor Spring bean : org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@530a8454 beanName : org.springframework.context.event.internalEventListenerProcessor Spring bean : org.springframework.context.event.EventListenerMethodProcessor@1e34c607 beanName : org.springframework.context.event.internalEventListenerFactory Spring bean : org.springframework.context.event.DefaultEventListenerFactory@5215cd9a beanName : fooController Spring bean : cn.felord.war.controller.FooController@31198ceb beanName : IServiceImpl Spring bean : cn.felord.war.controller.IServiceImpl@51671b08 <more...>2.2 通過名稱獲取特定的 Bean

從上面打印的信息我們也能看出來一些端倪。

有的 beanName 是類全限定名。 @Component、@Repository、@Service、@Controller等注解創(chuàng)建 Bean 時,如果不指定bean名稱,名稱的默認(rèn)規(guī)則是類名的首字母小寫,如 cn.felord.war.controller.FooController 為 fooController。如果類名前兩個或以上個字母都是大寫,那么名稱與類名一樣,如 cn.felord.war.controller.IServiceImpl 為 IServiceImpl @Bean 標(biāo)識的 Bean 默認(rèn) 為方法名稱。 配置類相關(guān)注解 @Configuration 一般使用類全限定名。

但是請注意:如果你在聲明 Bean 的時候指定了名稱就只是你指定的名稱 。如果我們熟悉這些規(guī)則,使用上面提到的getBean(String name) 方法不失為一種好辦法。

2.3 通過類型來獲取 Bean

如果我們不清楚我們想要的特定類型 Bean 的名稱,我們可以根據(jù)類型來獲取 Bean 。ApplicationContext 提供了可以加載特定類型的 Bean 的所有 Bean 的方法getBeansOfType()。它將返回 Map <String,Object> 其中鍵是 Bean 名稱,而值是 Bean 的實際對象。

我們修改 2.1 章節(jié) 例子中的 run 方法:

@Override public void run(String... args) throws Exception { Map<String, FooController> beansOfType = applicationContext.getBeansOfType(FooController.class); beansOfType.forEach((beanName,bean)->{ System.out.println('beanName : ' + beanName); System.out.println('bean : ' + bean); }); }

再次運行,控制臺打印出:

beanName : fooController bean : cn.felord.war.controller.FooController@545f80bf2.4 獲取特定 Bean 聲明注解標(biāo)記的 Bean

ApplicationContext 的 getBeansWithAnnotation() 方法可以讓我們獲取 @Service,@Controller或任何其它可以用來創(chuàng)建 Bean 的注解創(chuàng)建的 Bean

@Override public void run(String... args) throws Exception { Map<String, Object> beansWithAnnotation = applicationContext.getBeansWithAnnotation(Controller.class); beansWithAnnotation.forEach((beanName,bean)->{ System.out.println('beanName : ' + beanName); System.out.println('bean : ' + bean); }); }

打印出:

beanName : fooController bean : cn.felord.war.controller.FooController@18ca3c62 beanName : basicErrorController bean : org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController@2c0f76783. 總結(jié)

在本文中,我們學(xué)習(xí)如何從 Spring 應(yīng)用上下文中獲取所有 Bean 的列表。有時我們需要檢查我們期望的 Bean 是否在 Spring 上下文中加載,或者我們需要檢查 Spring IoC 聲明的特定的 Bean 。當(dāng)然你可以開啟Spring Boot Actuator 的 beans 端點來獲取所有的 Bean 信息。

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Spring框架入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設(shè)計有所幫助。

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久一区二区三区电影| 在线一区二区三区视频| 中文字幕av一区二区三区人| 国产精品99一区二区三区| 久久精品99久久久| 欧美一级网站| 美女免费视频一区| 国产成人久久精品麻豆二区| 粉嫩av一区二区三区四区五区| 国产精品成人一区二区不卡| 最新中文字幕在线播放| 日本欧美不卡| 免播放器亚洲| 日本成人手机在线| 国产精品115| 99成人超碰| 中文字幕日本一区| 国产精品v一区二区三区| 免费亚洲一区| 国产一区日韩欧美| 深夜福利一区| 国产激情在线播放| 日韩制服丝袜av| 久久精品国产一区二区| 香蕉人人精品| 欧美日韩一区二区国产| av资源亚洲| 亚洲人成在线影院| 岛国av在线网站| 久久性天堂网| 日韩成人精品一区二区| 亚洲一区二区三区中文字幕在线观看| 国产欧美日韩视频在线| 日韩av有码| 国产日产精品_国产精品毛片| 日韩电影免费网址| 日本不卡在线视频| 91九色精品| 国产在线一区不卡| 日韩精品免费视频一区二区三区| 91精品韩国| 国产精品扒开腿做爽爽爽软件| 日韩视频精品在线观看| 视频在线不卡免费观看| 欧美日韩中文| 蜜桃视频在线观看一区二区| 日韩久久一区二区三区| 国产精品蜜月aⅴ在线| 久久精品播放| 卡一精品卡二卡三网站乱码| 视频一区在线视频| 99视频精品视频高清免费| 国产日韩一区二区三区在线 | 亚洲综合精品| 国产 日韩 欧美 综合 一区| 日本一区中文字幕| 国产精品国码视频| 日韩高清电影免费| 日韩一区网站| 丝袜a∨在线一区二区三区不卡| 欧美freesex黑人又粗又大| 欧美激情福利| 日韩欧美在线精品| 免费在线看一区| 精品一区在线| 伊人久久婷婷| 香蕉视频成人在线观看| 视频一区欧美精品| 午夜久久福利| 国产精品一区二区99| 91精品观看| 亚洲欧美日韩国产| 欧美天堂在线| 国产在线一区不卡| 欧美羞羞视频| 神马久久午夜| 欧美日韩精品一区二区三区视频| 日韩在线观看一区| 日韩久久视频| 免费中文字幕日韩欧美| 久久精品国产99国产| 99riav国产精品| 国内精品伊人| 欧美日韩a区| 免费人成在线不卡| 亚洲一级黄色| 国产精品蜜芽在线观看| 国产亚洲电影| 亚洲狼人精品一区二区三区| 麻豆精品久久| 亚洲精品成a人ⅴ香蕉片| 新版的欧美在线视频| 欧美在线综合| av资源亚洲| 国产一区二区三区免费在线| 水野朝阳av一区二区三区| 色88888久久久久久影院| 国产精品一站二站| 99久精品视频在线观看视频| 国产精品极品在线观看| 日本一区二区三区中文字幕| 国产一区二区三区自拍| 国产在线观看91一区二区三区| 婷婷视频一区二区三区| 亚洲午夜在线| 亚洲一级少妇| 国产成人a视频高清在线观看| 亚洲永久精品唐人导航网址| 国产精品毛片一区二区三区| 欧洲一区二区三区精品| 日韩av有码| 理论片午夜视频在线观看| 国产精品久久久久久久免费软件 | 欧美1区2区3| 欧美在线观看天堂一区二区三区| 亚洲深夜av| 亚洲丝袜美腿一区| 在线免费观看亚洲| 奇米狠狠一区二区三区| 免费视频最近日韩| 日韩欧美美女在线观看| 久久超碰99| 欧洲av不卡| 在线视频亚洲欧美中文| 国产福利资源一区| 日本一区二区免费高清| 久久亚洲在线| 蜜芽一区二区三区| 欧美日韩18| 福利一区视频| 在线看片不卡| 亚洲精品伦理| 国产一区二区三区四区大秀| 99久久久国产精品美女| 婷婷亚洲五月| 亚洲www啪成人一区二区| 尤物在线精品| 国产伦精品一区二区三区在线播放| 精品久久久久中文字幕小说| 丝袜诱惑一区二区| 蜜臀av亚洲一区中文字幕| 欧美精品三级在线| 日韩久久精品网| 免费看日韩精品| 麻豆精品在线| 中文不卡在线| 久久一区欧美| 亚洲欧美成人综合| 国产亚洲久久| 免费一级欧美在线观看视频| 久久理论电影| 国产精品自在| 亚洲精品91| 国产精品jk白丝蜜臀av小说| 精品日韩视频| 日韩av电影一区| 国产精品日韩| 秋霞影院一区二区三区| 午夜欧美精品久久久久久久| 欧美久久天堂| 欧洲精品一区二区三区| 成人国产精选| 精品一区二区男人吃奶| 亚洲一区日韩在线| 国产精品毛片久久久| 亚洲激情中文在线| 日韩免费av| 精品国产99| 丝袜诱惑制服诱惑色一区在线观看| 伊人久久在线| 国产精品成人3p一区二区三区| 好吊视频一区二区三区四区| 成人在线免费观看91| 日本三级亚洲精品| 免费av一区二区三区四区| 91亚洲人成网污www| 国产日韩一区二区三区在线| 亚洲精品国产精品粉嫩| 香蕉久久久久久久av网站| 国产精品专区免费| 精品三区视频| 国产麻豆一区| 亚洲二区免费| 福利在线免费视频| 亚洲伊人av| 中文一区二区| 国产精品三p一区二区| 国产一区日韩一区| 国产精品欧美一区二区三区不卡| 国产乱码精品| 秋霞国产精品| 蜜桃av一区二区在线观看| 国产日韩1区| 久久夜夜操妹子| 国产精品97| 日韩在线电影| 色偷偷偷在线视频播放| 免费在线观看不卡| 国内精品亚洲| 亚洲精品国产偷自在线观看|