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

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

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

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

本文實(shí)例講述了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àn)橛行┣闆r下我們不得不從應(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ùn)行應(yīng)用會(huì)輸出:

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 時(shí),如果不指定bean名稱,名稱的默認(rèn)規(guī)則是類名的首字母小寫,如 cn.felord.war.controller.FooController 為 fooController。如果類名前兩個(gè)或以上個(gè)字母都是大寫,那么名稱與類名一樣,如 cn.felord.war.controller.IServiceImpl 為 IServiceImpl @Bean 標(biāo)識的 Bean 默認(rèn) 為方法名稱。 配置類相關(guān)注解 @Configuration 一般使用類全限定名。

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

2.3 通過類型來獲取 Bean

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

我們修改 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); }); }

再次運(yùn)行,控制臺打印出:

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 的列表。有時(shí)我們需要檢查我們期望的 Bean 是否在 Spring 上下文中加載,或者我們需要檢查 Spring IoC 聲明的特定的 Bean 。當(dāng)然你可以開啟Spring Boot Actuator 的 beans 端點(diǎn)來獲取所有的 Bean 信息。

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

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

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品免费精品自在线观看| 亚洲三级国产| 欧美一区精品| 青青草视频一区| 亚洲三级视频| 日本精品久久| 国产精品成人3p一区二区三区| 国产精品magnet| 高清一区二区| 亚洲电影有码| 99视频精品全部免费在线视频| 亚洲a一区二区三区| 自拍日韩欧美| 亚洲a成人v| 国产麻豆精品| 高潮久久久久久久久久久久久久| 91看片一区| 国产一区视频在线观看免费| 狠狠干综合网| 亚欧成人精品| 久久gogo国模啪啪裸体| 成人免费一区| 在线国产一区| 日韩国产欧美三级| 精品一区二区三区免费看| 亚洲精品**中文毛片| 香蕉精品久久| 亚洲久久视频| 国产精品视频一区二区三区四蜜臂 | 最新国产精品| 91欧美精品| www.com.cn成人| 亚洲欧美日韩精品一区二区| 青青国产精品| 成人啊v在线| 蜜臀久久久99精品久久久久久| 国产剧情一区| 99久久精品网| 日本免费一区二区视频| 高清日韩欧美| 久久亚洲美女| 精品国产精品国产偷麻豆| 三级小说欧洲区亚洲区| 蜜桃av一区| 精品一级视频| 日韩视频一区二区三区在线播放免费观看| 日韩欧美高清一区二区三区| 国产一区二区三区不卡视频网站 | 国产在线日韩精品| 亚洲激情久久| 国产精品videossex| 欧美.日韩.国产.一区.二区| 欧美日韩18| 午夜久久免费观看| 国产精品1区| 亚洲一区区二区| 精品视频一二| 一区二区精品| 蜜桃精品在线| 国产精选久久| 老色鬼久久亚洲一区二区| 国产精品久久久久久久久久妞妞 | 久久av偷拍| av亚洲免费| 国产精品视频一区二区三区综合| 一区二区三区视频免费观看| 国产麻豆精品久久| 西西人体一区二区| 日韩深夜视频| 国产乱人伦精品一区| 日韩午夜一区| 另类专区亚洲| 国产美女久久| 亚洲一区二区三区高清不卡| 在线精品亚洲欧美日韩国产| 日本色综合中文字幕| 美女亚洲一区| 国产一区二区精品福利地址| 日韩精品午夜视频| 亚洲先锋成人| 岛国av在线播放| 欧美激情麻豆| 免费黄网站欧美| 欧美一区二区三区激情视频 | 亚洲成人免费| 老牛影视精品| 国产精品入口久久| 亚洲人成亚洲精品| 波多视频一区| 精品国产亚洲一区二区在线观看| 日韩精品社区| 日韩影院精彩在线| 婷婷色综合网| 久久久久99| 成人亚洲一区| 麻豆成人综合网| 国产亚洲一卡2卡3卡4卡新区| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲天堂久久| 999精品在线| 高清久久精品| 国产一区三区在线播放| 国产精品亚洲综合久久| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品v一区二区三区| 日韩**一区毛片| 亚洲综合精品四区| 99香蕉国产精品偷在线观看| 国户精品久久久久久久久久久不卡| 久久精品欧洲| 国产精品黄色| 开心激情综合| 国产精品一页| 日韩精品导航| 日韩激情网站| 91伊人久久| 国产精品亚洲四区在线观看 | 精品国产99| 国产在线观看91一区二区三区| 国产乱码精品一区二区亚洲| 久久国产婷婷国产香蕉| 国产欧美亚洲一区| 国产精选一区| 免费在线日韩av| 久久亚洲精品中文字幕| 精品视频网站| 国产中文字幕一区二区三区| 国产精品二区不卡| 亚洲精品国产嫩草在线观看| 99国产精品免费视频观看| 999国产精品视频| 欧美日中文字幕| 99国产精品久久久久久久| 亚洲欧洲一区二区天堂久久| 亚洲一区二区三区高清| 亚洲欧洲一区| 日韩黄色在线观看| 精品免费av在线| 久久精品亚洲人成影院| 久久久久美女| 亚洲一区日韩| 在线亚洲观看| 亚洲精品综合| 日本精品久久| 久久中文字幕一区二区| 精品资源在线| 天堂日韩电影| 水野朝阳av一区二区三区| 噜噜噜久久亚洲精品国产品小说| 亚洲精品伊人| 国产精品亚洲一区二区在线观看| 成人午夜网址| 最新日韩av| 国产色噜噜噜91在线精品| 精品视频在线观看网站| 久久久久国产一区二区| 在线精品视频在线观看高清| 日本一区中文字幕| 国产专区精品| 亚洲免费观看| 国产精品久一| 激情久久五月| 日韩高清在线观看一区二区| 你懂的国产精品| 欧美亚洲精品在线| 青青草精品视频| 免费高潮视频95在线观看网站| 国产视频一区欧美| 国产精品成人3p一区二区三区| 日韩av一级| 日韩一区精品| 精品国产乱码久久久| 欧洲激情综合| 国产精品亚洲一区二区在线观看| 日本在线高清| 偷拍亚洲精品| 日韩在线第七页| 亚洲精品在线二区| 日韩精品不卡一区二区| 最近国产精品视频| 樱桃视频成人在线观看| 日韩欧美中文字幕一区二区三区 | 国产毛片精品| 亚洲www啪成人一区二区| 日韩影院免费视频| 日韩成人精品一区| 午夜久久av| 久久高清免费| 欧美永久精品| 91精品91| 色婷婷色综合| 日韩精品视频一区二区三区| 久久激情网站| 国产精品xxx| 视频一区中文字幕国产| 麻豆网站免费在线观看| 日本亚洲三级在线| 免费黄色成人| 精品一区视频| 亚洲三级视频|