精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

工具類如何獲取到 Spring 容器中的 Bean?

開發(fā) 開發(fā)工具
當(dāng)然這只是一個理論,在實際開發(fā)中,我們往往要用到 Spring 容器為我們提供的諸多資源,例如想要獲取到容器中的配置、獲取到容器中的 Bean 等等。在這種情況下,就需要 Spring 容器中的 Bean 真正的意識到 Spring 容器的存在,才能要到這些東西,那么如何讓一個 Bean 意識到 Spring 容器的存在呢?

1. Aware 接口

小伙伴們知道,Spring 容器最大的特點在于所有的 Bean 對于 Spring 容器的存在是沒有意識的,因此我們常說理論上你可以無縫將 Spring 容器切換為其他容器(然而在現(xiàn)實世界中,我們其實沒有這樣的選擇,除了 Spring 容器,難道還有更好用的?)。

當(dāng)然這只是一個理論,在實際開發(fā)中,我們往往要用到 Spring 容器為我們提供的諸多資源,例如想要獲取到容器中的配置、獲取到容器中的 Bean 等等。在這種情況下,就需要 Spring 容器中的 Bean 真正的意識到 Spring 容器的存在,才能要到這些東西,那么如何讓一個 Bean 意識到 Spring 容器的存在呢?

這就依賴于 Spring 容器給我們提供的各種 Aware 接口了。

/**
* A marker superinterface indicating that a bean is eligible to be notified by the
* Spring container of a particular framework object through a callback-style method.
* The actual method signature is determined by individual subinterfaces but should
* typically consist of just one void-returning method that accepts a single argument.
*
* <p>Note that merely implementing {@link Aware} provides no default functionality.
* Rather, processing must be done explicitly, for example in a
* {@link org.springframework.beans.factory.config.BeanPostProcessor}.
* Refer to {@link org.springframework.context.support.ApplicationContextAwareProcessor}
* for an example of processing specific {@code *Aware} interface callbacks.
*
* @author Chris Beams
* @author Juergen Hoeller
* @since 3.1
*/
public interface Aware {

}

從這個接口的注釋中,我們也能大概看出來,這個接口的子類,主要是提供了一些只有一個參數(shù)的 set 方法,通過這些方法可以讓 Spring 容器感知到某一件事情。

Aware 的實現(xiàn)有很多,大的方向來說主要有如下一些:

圖片

每一個 Aware 的作用如下:

  • ApplicationEventPublisherAware:實現(xiàn)該接口的對象可以獲取事件發(fā)布的能力。
  • ServletContextAware:實現(xiàn)該接口的對象可以獲取到 ServletContext 對象。
  • MessageSourceAware:實現(xiàn)該接口的對象可以獲取到 MessageSource 對象,MessageSource 支持多消息源,主要用于主要用于國際化。
  • ResourceLoaderAware:實現(xiàn)該接口的對象可以獲取到一個 ResourceLoader,Spring ResourceLoader 則為我們提供了一個統(tǒng)一的 getResource() 方法來通過資源路徑檢索外部資源,例如文本文件、XML 文件、屬性文件或圖像文件等。
  • ApplicationStartupAware:實現(xiàn)該接口的對象可以獲取到一個 ApplicationStartup 對象,這個比較新,是 Spring 5.3 中新推出的,通過 ApplicationStartup 可以標記應(yīng)用程序啟動期間的步驟,并收集有關(guān)執(zhí)行上下文或其處理時間的數(shù)據(jù)。
  • NotificationPublisherAware:實現(xiàn)該接的對象可以獲取到一個 NotificationPublisher 對象,通過該對象可以實現(xiàn)通知的發(fā)送。
  • EnvironmentAware:實現(xiàn)該接口的對象可以獲取到一個 Environment 對象,通過 Environment 可以獲取到容器的環(huán)境信息。
  • BeanFactoryAware:實現(xiàn)該接口的對象可以獲取到一個 BeanFactory 對象,通過 BeanFactory 可以完成 Bean 的查詢等操作。
  • ImportAware:實現(xiàn)該接口的對象可以獲取到一個 AnnotationMetadata 對象,ImportAware 接口是需要和 @Import 注解一起使用的。在 @Import 作為元注解使用時,通過 @Import 導(dǎo)入的配置類如果實現(xiàn)了 ImportAware 接口就可以獲取到導(dǎo)入該配置類接口的數(shù)據(jù)配置。
  • EmbeddedValueResolverAware:實現(xiàn)該接口的對象可以獲取到一個 StringValueResolver 對象,通過 StringValueResolver 對象,可以讀取到 Spring 容器中的 properties 配置的值(YAML 配置也可以)。
  • ServletConfigAware:實現(xiàn)該接口的對象可以獲取到一個 ServletConfig 對象,不過這個似乎沒什么用,我們很少自己去配置 ServletConfig。
  • LoadTimeWeaverAware:實現(xiàn)該接口的對象可以獲取到一個 LoadTimeWeaver 對象,通過該對象可以獲取加載 Spring Bean 時織入的第三方模塊,如 AspectJ 等。
  • BeanClassLoaderAware:實現(xiàn)該接口的對象可以獲取到一個 ClassLoader 對象,ClassLoader 能干嘛不需要我多說了吧。
  • BeanNameAware:實現(xiàn)該接口的對象可以獲取到一個當(dāng)前 Bean 的名稱。
  • ApplicationContextAware:實現(xiàn)該接口的對象可以獲取到一個 ApplicationContext 對象,通過 ApplicationContext 可以獲取容器中的 Bean、環(huán)境等信息。

這是 Spring 中提供的一堆 Aware。

接下來松哥隨便寫個例子大家來看下 Aware 的用法。

2. BeanFactoryAware

實現(xiàn)該接口的對象可以獲取到一個 BeanFactory 對象,通過 BeanFactory 可以完成 Bean 的查詢等操作。這算是一個比較常見的 Aware 了,我們一起來看下。

這里為了省事,我就在 Spring Boot 中來和大家演示。

首先我們來定義一個簡單的 UserService:

@Service
public class UserService {
public void hello() {
System.out.println("hello javaboy!");
}
}

然后提供一個工具類:

@Component
public class BeanUtils implements BeanFactoryAware {
private static BeanFactory beanFactory = null;

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
BeanUtils.beanFactory = beanFactory;
}

public static <T> T getBean(String beanName) {
return (T) beanFactory.getBean(beanName);
}
}

有了這個工具類,接下來我們就可以在一個非 Spring 管理的 Bean 中,隨時隨地的查詢 Bean 了,像下面這樣:

UserService userService = BeanUtils.getBean("userService");
userService.hello();

3. TienChin 項目實踐

為什么會有今天這篇文章呢?主要是在松哥最近做的 TienChin 項目中,有一個地方涉及到這塊知識點了,但是有的小伙伴不熟悉,因此就拎出來和大家梳理下。

在 TienChin 項目中,在記錄日志的時候,因為日志是一個延遲任務(wù),所以提前準備好了相關(guān)的 Bean 已經(jīng)注冊到 Spring 容器中了,像下面這樣:

@Configuration
public class ThreadPoolConfig {

/**
* 執(zhí)行周期性或定時任務(wù)
*/
@Bean(name = "scheduledExecutorService")
protected ScheduledExecutorService scheduledExecutorService() {
return new ScheduledThreadPoolExecutor(corePoolSize,
new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(),
new ThreadPoolExecutor.CallerRunsPolicy()) {
@Override
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
Threads.printException(r, t);
}
};
}
}
@Component
public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware {
/**
* Spring應(yīng)用上下文環(huán)境
*/
private static ConfigurableListableBeanFactory beanFactory;

private static ApplicationContext applicationContext;

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
SpringUtils.beanFactory = beanFactory;
}

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
}

/**
* 獲取對象
*
* @param name
* @return Object 一個以所給名字注冊的bean的實例
* @throws org.springframework.beans.BeansException
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
return (T) beanFactory.getBean(name);
}

/**
* 獲取類型為requiredType的對象
*
* @param clz
* @return
* @throws org.springframework.beans.BeansException
*/
public static <T> T getBean(Class<T> clz) throws BeansException {
T result = (T) beanFactory.getBean(clz);
return result;
}
}

而寫日志的異步任務(wù)工具類,并非一個容器,所以要通過這個工具類獲取相應(yīng)的 Bean,如下:

public class AsyncManager {
/**
* 操作延遲10毫秒
*/
private final int OPERATE_DELAY_TIME = 10;

/**
* 異步操作任務(wù)調(diào)度線程池
*/
private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");

/**
* 單例模式
*/
private AsyncManager() {
}

private static AsyncManager me = new AsyncManager();

public static AsyncManager me() {
return me;
}

/**
* 執(zhí)行任務(wù)
*
* @param task 任務(wù)
*/
public void execute(TimerTask task) {
executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
}
}

有了 SpringUtils 我們就可以在一個非 Spring 容器所管理的 Bean 中,獲取到 Spring 容器中的 Bean 了。

責(zé)任編輯:武曉燕 來源: 江南一點雨
相關(guān)推薦

2023-01-13 07:41:20

BeanSpring容器

2023-11-03 08:19:18

SpringBean容器

2009-06-17 17:20:14

BeanFactorySpring

2022-12-27 08:12:27

IOC容器Bean

2024-05-29 08:19:03

2009-06-17 17:04:37

BeanFactorySpring

2024-02-23 10:33:34

SpringBean容器

2023-07-26 00:43:31

2022-07-20 07:32:46

Prototypevalue?容器

2011-03-18 09:27:00

Spring

2022-07-21 09:31:58

Actuator密碼框架

2021-03-08 08:40:25

Spring Bean 創(chuàng)建單例對象

2022-04-27 08:19:53

Docker容器Linux

2021-04-29 07:18:21

Spring IOC容器單例

2024-05-28 07:55:31

SpringBean用域

2022-01-10 09:43:55

CCleanerWindows 11微軟商店

2021-05-11 07:42:59

BeanSpring屬性

2023-07-29 22:11:58

Spring容器Component

2009-01-30 09:12:11

SpringApplicationJavaWeb

2011-04-02 15:25:41

Spring
點贊
收藏

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

视频在线不卡| 免费不卡av在线| 精品视频第一页| 欧美激情福利| 亚洲精品大片www| 精品乱子伦一区二区三区| 亚洲国产av一区二区三区| 久久久久久久久久久久久久久久久久 | 精品伊人久久久久7777人| 久久精品亚洲精品| 菠萝菠萝蜜网站| 黄色成人免费网| 亚洲乱码国产乱码精品精的特点 | 久久夜靖品2区| 波多野结衣在线观看一区二区| 一区二区三区成人| 久久亚洲国产精品日日av夜夜| 青青草原在线免费观看视频| 精品一区在线| 一区二区三区中文字幕电影 | 国产成人毛片| 亚洲一区二区三区精品在线| 视频一区不卡| 五月天丁香视频| 韩国精品久久久| 热久久99这里有精品| 午夜精品一区二区三级视频| 国产成人影院| 亚洲精品久久久久中文字幕二区| 黄色一级片在线看| www.久久热.com| 成人97人人超碰人人99| 成人高h视频在线| 国产乱码77777777| 亚洲精品播放| 欧美成人官网二区| 亚洲图片 自拍偷拍| 中文另类视频| 精品久久久一区| 久久久99精品视频| 老司机午夜在线视频| 久久久亚洲精品一区二区三区| 午夜精品一区二区三区视频免费看| 国产人妻精品午夜福利免费| 久久婷婷五月综合色丁香| 精品女厕一区二区三区| 97超碰国产精品| 污影院在线观看| 一区二区三区中文字幕| 欧洲精品视频在线| av片在线观看| 亚洲日本在线天堂| 欧洲美女和动交zoz0z| 男人天堂手机在线| 国产资源精品在线观看| 久久99国产精品自在自在app| 最好看的中文字幕| 9999精品免费视频| 欧美精品第一页| www.国产视频.com| 国产亚洲高清在线观看| 日韩欧美视频在线| 国产午夜在线一区二区三区| 国产精品一线| 亚洲国产成人91精品| 亚洲午夜久久久久久久久| 盗摄系列偷拍视频精品tp| 亚洲国产日韩欧美在线图片| 制服丝袜第一页在线观看| 精品综合久久88少妇激情| 美脚恋feet久草欧美| 久久精品国产免费| 亚洲一区二区三区久久| 青青草原在线免费观看视频| 亚洲欧美综合| 97人人做人人爱| 精品国产一区二区三区四| 久久福利毛片| 久久精品视频播放| 免费在线观看一级片| 韩国亚洲精品| 日韩美女视频在线观看| 在线观看色网站| 国产福利精品一区| 久久国产精品一区二区三区| 国产人成在线观看| 亚洲视频一区二区免费在线观看| 国产专区一区二区三区| 日本大臀精品| 亚洲欧美色综合| 国产免费黄色小视频| 日本免费久久| 欧美精品乱人伦久久久久久| 丰满少妇xbxb毛片日本| 久久精品xxxxx| 91精品国产免费| 日本一卡二卡在线| 水蜜桃精品av一区二区| 久久免费国产精品1| 国产亚洲欧美另类一区二区三区| 国产网站免费在线观看| 欧美精品资源| 日韩精品一区二区三区在线播放| 国产视频1区2区3区| 日日夜夜天天综合入口| 亚洲成人免费在线观看| 欧美一级黄色影院| 51亚洲精品| 中文字幕欧美视频在线| 日本熟妇毛耸耸xxxxxx| 四虎成人精品永久免费av九九| 亚洲乱码国产乱码精品精天堂 | 精品综合免费视频观看| 国内一区在线| 黄色片网站在线| 欧美性xxxx18| 91精品人妻一区二区三区四区| 精品三级国产| 一本色道久久综合狠狠躁篇的优点 | 伊人成综合网站| 91精品国产色综合久久ai换脸| 91aaa精品| 波多野结衣在线观看一区二区| 中文字幕欧美日韩精品| 日本中文字幕在线| aa亚洲婷婷| 96国产粉嫩美女| 免费资源在线观看| 亚洲成av人片在www色猫咪| 三上悠亚在线一区| 国产一区二区在线| 欧美在线视频免费| 人妻精品一区二区三区| 亚洲精品一二三四区| 色婷婷成人在线| 国产影视精品一区二区三区| 国产a精品视频| 夜夜嗨av色综合久久久综合网| 成人三级做爰av| 99国内精品久久久久| 亚洲欧美在线一区| 四虎精品永久在线| www.日本不卡| 久久国产精品视频在线观看| 一区视频网站| 欧美精品在线视频观看| 国产视频aaa| 国产精品白丝在线| 日本美女视频一区| 国产精品99一区二区三| 91精品久久久久久久久久入口| 精品人妻av一区二区三区| 自拍偷在线精品自拍偷无码专区| 国内成+人亚洲| 91在线中字| 欧美一区二区福利在线| 希岛爱理中文字幕| 国产大陆a不卡| 屁屁影院ccyy国产第一页| 成人三级av在线| 亚洲色图13p| 无码视频一区二区三区| 国产无人区一区二区三区| 成年人在线观看视频免费| 久久在线观看| 欧美成人免费小视频| 亚洲av无码一区二区乱子伦 | 亚洲区免费视频| 久久高清国产| 亚洲高清123| 日韩综合av| 久久99久久99精品中文字幕| 乱色精品无码一区二区国产盗| 中文字幕亚洲欧美在线不卡| 亚洲成人天堂网| 综合久久婷婷| 精品乱色一区二区中文字幕| 午夜激情成人网| 久久精品2019中文字幕| 亚洲第一页视频| 精品国产91久久久久久| 婷婷丁香综合网| 国产成人av资源| 777米奇影视第四色| 日韩大片在线观看| 成人欧美一区二区三区视频| а√天堂8资源中文在线| 亚洲天堂男人的天堂| 91成人国产综合久久精品| 亚洲午夜免费福利视频| 精品无人区无码乱码毛片国产| 在线综合亚洲| 亚洲伊人婷婷| 久久夜色电影| 国产日本欧美在线观看| 午夜av免费在线观看| 在线视频一区二区免费| 色欲欲www成人网站| 99热免费精品在线观看| 亚洲女人毛片| 精品国产一区二区三区不卡蜜臂| 欧美激情视频三区| 国产高清视频在线观看| 精品国内片67194| www.亚洲激情| 亚洲五月六月丁香激情| 91麻豆精品久久毛片一级| 成人中文字幕电影| 九一精品久久久| 丝袜美腿成人在线| 少妇人妻无码专区视频| 欧美3p视频| 欧美一级日本a级v片| 中文无码日韩欧| 国产日韩欧美视频在线| 成人影院大全| 欧美激情综合色| 97最新国自产拍视频在线完整在线看| 欧美色精品在线视频| 亚洲欧美中文字幕| 中文无码精品一区二区三区| 国产91精品久久久久久久网曝门| 黄色一级视频播放| 九九热爱视频精品视频| 国产乱子伦精品| 亚洲狼人在线| 国产成人av网址| 国产精品蜜芽在线观看| 色综合视频一区中文字幕| chinese偷拍一区二区三区| 亚洲国产中文字幕久久网| 国产免费黄色片| 欧美色成人综合| jizz国产在线| 欧美视频一区二区三区…| 久久久久久久久97| 亚洲欧美国产高清| 国产大屁股喷水视频在线观看| 久久97超碰色| 婷婷六月天在线| 日韩高清在线一区| 无码人妻丰满熟妇区五十路百度| 成人羞羞在线观看网站| 91精品综合久久久久久五月天| 日本电影在线观看| 久久精品最新地址| 黄色片网站在线观看| 日韩中文字幕免费看| av在线资源网| 在线看欧美日韩| 2017亚洲天堂1024| 在线色欧美三级视频| 国产尤物视频在线| 国产亚洲精品久久久久久牛牛| jizz国产视频| 欧美一区二区三区四区视频| 国产精品毛片一区视频播| 69久久夜色精品国产69蝌蚪网| 亚洲精品77777| 亚洲成人777| 日韩三级视频在线播放| 精品久久久香蕉免费精品视频| www日韩在线| 樱桃视频在线观看一区| 黄色在线观看免费| 亚洲综合色视频| 欧美另类一区二区| 91黄色激情网站| 中文字幕另类日韩欧美亚洲嫩草| 久久一二三国产| 一本色道久久综合亚洲精品图片 | 亚洲日韩欧美一区二区在线| 无码人妻精品中文字幕| 最新国产精品久久精品| 九九视频在线免费观看| 午夜精品久久久久久久99水蜜桃| 欧美a级片免费看| 亚洲欧美日韩综合aⅴ视频| 国产一级av毛片| 精品国产乱码久久久久久婷婷 | 色欲欲www成人网站| fc2成人免费人成在线观看播放| 红桃视频 国产| 国产99久久久久久免费看农村| 五月婷婷之婷婷| 成人动漫中文字幕| 亚洲精品成人av久久| 亚洲女人****多毛耸耸8| 日韩精品乱码久久久久久| 欧美性色视频在线| 97超碰国产在线| 亚洲成av人影院在线观看| 国产在线一二| 欧美美女18p| 美女一区网站| 亚洲综合在线中文字幕| 亚洲婷婷伊人| 伊人久久大香线蕉午夜av| 亚洲人成在线影院| 亚洲视频一二三四| 91亚洲精华国产精华精华液| 国产又粗又猛又爽又黄的视频四季| 日本一区二区三区在线观看| 欧美精品一区二区蜜桃| 精品福利在线观看| 国产精品久久久久久免费免熟 | 三级av免费观看| 99久久精品国产麻豆演员表| 亚洲不卡的av| 色欲综合视频天天天| 日韩av男人天堂| 欧美日韩亚洲综合一区二区三区 | 制服丝袜在线91| 午夜视频1000| 欧美日韩国产二区| 国产精品无码久久久久| 欧美不卡三区| 欧美日韩国产探花| 亚洲天堂2018av| 久久九九久久九九| 日韩欧美中文字幕一区二区| 欧美一级久久久| 一级毛片视频在线观看| 欧亚精品在线观看| jizz性欧美23| 国产精品88久久久久久妇女| 日韩不卡手机在线v区| 日b视频在线观看| 怡红院av一区二区三区| 91成人国产综合久久精品| 亚洲视频777| 亚洲优女在线| 久久精品人成| 99国产精品自拍| 大桥未久恸哭の女教师| 一区二区三区小说| 一级黄色录像大片| 中文字幕欧美专区| 少妇精品视频一区二区免费看| 91九色综合久久| 久久人体视频| 91小视频网站| 国产精品视频看| 精品无码一区二区三区的天堂| 欧美一级片在线观看| 日本视频不卡| 91久久久久久久久久久| 小处雏高清一区二区三区| 国产传媒免费观看| 中文字幕一区二区三区四区 | 黄色a一级视频| 欧美日韩精品在线播放| 日本高清视频免费观看| 久久久久久伊人| 国产图片一区| 免费看国产一级片| 91在线你懂得| 久久久蜜桃一区二区| 亚洲人午夜色婷婷| 国产精品久久久久77777丨| 午夜午夜精品一区二区三区文| 亚洲视频高清| 男男做爰猛烈叫床爽爽小说| 欧美性猛交xxxx乱大交| 福利视频在线播放| 国产日韩精品综合网站| 亚洲精品在线观看91| 久久久久久无码精品人妻一区二区| 99久久国产综合精品色伊| 一本在线免费视频| 91麻豆精品国产91久久久更新时间 | 亚洲高清自拍| 网站免费在线观看| 日韩欧美一区二区在线| jizz亚洲| julia一区二区中文久久94| 在线日本成人| 免费看的黄色网| 这里是久久伊人| 金瓶狂野欧美性猛交xxxx| 久久国产精品久久精品国产| 日本sm残虐另类| 日韩一级片av| 日韩精品极品毛片系列视频| 欧美日韩免费观看视频| 在线观看国产一区| proumb性欧美在线观看| 日本精品入口免费视频| 另类视频在线观看| 天天久久夜夜| 亚洲a级黄色片| 偷偷要91色婷婷| av女优在线| 国产精品夜夜夜一区二区三区尤| 欧美精品一卡| 亚洲第一香蕉网| 日韩欧美在线网站| 你懂得影院夜精品a| 玖玖精品在线视频| 久久综合久久鬼色中文字|