国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?

這篇具有很好參考價(jià)值的文章主要介紹了spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、主類:
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存
二、配置類:
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存
三、singleton bean的創(chuàng)建流程
運(yùn)行到context.refresh();
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存
進(jìn)入refresh方法:
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存
向下運(yùn)行到紅線位置時(shí):
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存
會(huì)實(shí)例化所有的singleton bean.進(jìn)入finisheBeanFactoryInitialization方法:
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存
向下拖動(dòng)代碼,可以看到beanFactory.preInstantiateSingletons();
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存
進(jìn)入preInstantiateSingletons方法:

	public void preInstantiateSingletons() throws BeansException {
		if (logger.isTraceEnabled()) {
			logger.trace("Pre-instantiating singletons in " + this);
		}

		// Iterate over a copy to allow for init methods which in turn register new bean definitions.
		// While this may not be part of the regular factory bootstrap, it does otherwise work fine.
		List<String> beanNames = new ArrayList<>(this.beanDefinitionNames);

		// Trigger initialization of all non-lazy singleton beans...
		for (String beanName : beanNames) {
			RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);
			if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()) {
				if (isFactoryBean(beanName)) {
					Object bean = getBean(FACTORY_BEAN_PREFIX + beanName);
					if (bean instanceof FactoryBean) {
						final FactoryBean<?> factory = (FactoryBean<?>) bean;
						boolean isEagerInit;
						if (System.getSecurityManager() != null && factory instanceof SmartFactoryBean) {
							isEagerInit = AccessController.doPrivileged((PrivilegedAction<Boolean>)
											((SmartFactoryBean<?>) factory)::isEagerInit,
									getAccessControlContext());
						}
						else {
							isEagerInit = (factory instanceof SmartFactoryBean &&
									((SmartFactoryBean<?>) factory).isEagerInit());
						}
						if (isEagerInit) {
							getBean(beanName);
						}
					}
				}
				else {
					getBean(beanName);
				}
			}
		}

		// Trigger post-initialization callback for all applicable beans...
		for (String beanName : beanNames) {
			Object singletonInstance = getSingleton(beanName);
			if (singletonInstance instanceof SmartInitializingSingleton) {
				final SmartInitializingSingleton smartSingleton = (SmartInitializingSingleton) singletonInstance;
				if (System.getSecurityManager() != null) {
					AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
						smartSingleton.afterSingletonsInstantiated();
						return null;
					}, getAccessControlContext());
				}
				else {
					smartSingleton.afterSingletonsInstantiated();
				}
			}
		}
	}

可以看到實(shí)例化singleton bean的代碼:
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存
可以看到對(duì)非abstract、singleton的、非懶加載的bean,則會(huì)調(diào)用getBean方法創(chuàng)建bean并緩存(getBean方法的流程不再詳述)
spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?,Spring,spring,單例模式,緩存文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-600333.html

到了這里,關(guān)于spring復(fù)習(xí):(50)@Configuration注解配置的singleton的bean是什么時(shí)候被創(chuàng)建出來(lái)并緩存到容器的?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring系列二:基于注解配置bean【建議收藏】

    Spring系列二:基于注解配置bean【建議收藏】

    上文中, 我們學(xué)習(xí)到了 Spring系列一:spring的安裝與使用 接下來(lái)我們學(xué)習(xí), 通過(guò)XML配置bean Bean管理包括兩方面: 創(chuàng)建bean對(duì)象, 給bean注入屬性 案例: 通過(guò)spring的ioc容器, 獲取一個(gè)bean對(duì)象, 獲取方式: 按類型. 演示通過(guò)bean的類型獲取對(duì)象 細(xì)節(jié) 按照類型獲取bean, 要求ioc容器中的同一個(gè)

    2024年02月14日
    瀏覽(20)
  • Spring注解驅(qū)動(dòng)開發(fā)之常用注解案例_告別在XML中配置Bean

    注解驅(qū)動(dòng)開發(fā)就是不再使用Spring的bean.xml文件,改為純使用注解的方式開發(fā) @Configuration 此注解為配置類注解,相當(dāng)于spring.xml文件,即配置類==配置文件 @Bean 給容器中注冊(cè)一個(gè)Bean;類型為返回值的類型,id默認(rèn)是用方法名作為id 示例 Person類(后續(xù)注解配置類中都會(huì)以此類舉例),

    2024年01月21日
    瀏覽(28)
  • Spring框架中的Singleton和Prototype Bean作用域

    Spring框架中的Singleton和Prototype Bean作用域

    Spring框架是依賴注入的事實(shí)上的框架,在開發(fā)可擴(kuò)展、彈性和安全的云原生環(huán)境中具有良好的記錄。 在使用Spring Beans時(shí),初學(xué)者經(jīng)常會(huì)對(duì)Spring beans和它們的作用域感到有些困惑。 以下是我對(duì)Singleton和Prototype Bean作用域的簡(jiǎn)單示例進(jìn)行闡述的嘗試。 Singleton Bean作用域 :正如其

    2024年02月11日
    瀏覽(21)
  • Spring 6.0官方文檔示例(23): singleton類型的bean和prototype類型的bean協(xié)同工作的方法(二)

    使用lookup-method: 一、實(shí)體類: 二、配置文件: 三、主類:

    2024年02月15日
    瀏覽(17)
  • Spring 6.0官方文檔示例(22): singleton類型的bean和prototype類型的bean協(xié)同工作的方法(一)

    一、配置文件: 二、實(shí)體類 三、主類:

    2024年02月15日
    瀏覽(21)
  • 一起學(xué)SF框架系列5.8-spring-Beans-Bean注解解析3-解析配置component-scan

    本文主要講述Spring是如何解析“context:component-scan”元素,掃描加載目錄下的BeanDefinition。 1、解析的元素如下: 注:該元素解析過(guò)程中,會(huì)自動(dòng)處理“context:annotation-config/”元素要解析的內(nèi)容。 2、只掃描加載目錄下的BeanDefinition,不對(duì)注解進(jìn)行解析。在AbstractApplicationContext.

    2024年02月16日
    瀏覽(16)
  • Spring IOC @Configuration注解分析

    在使用SpringBoot開發(fā)時(shí),最常用的注解有@Component、@Service、@Controller、@Configuration等。當(dāng)類使用這些注解標(biāo)記時(shí),類會(huì)被Spring IOC容器管理,包括創(chuàng)建,填充屬性和實(shí)例化。 但是Spring容器如何發(fā)現(xiàn)并將這些類放到容器進(jìn)行管理呢? 今天這篇博客主要分析Spring如何處理@Configuratio

    2024年02月08日
    瀏覽(18)
  • 使用@Configuration和@Bean給spring容器中注入組件

    以前我們是使用配置文件來(lái)注冊(cè)bean的,現(xiàn)如今可以用@Configuration 來(lái)代替配置文件。

    2024年02月11日
    瀏覽(20)
  • [Spring6.0源碼解析]簡(jiǎn)述@Configuration注解

    @Configuration 標(biāo)注在類上,啟動(dòng) Spring 會(huì)自動(dòng)掃描 @Configuration 注解的類,將其注冊(cè)到IOC容器并實(shí)例化bean對(duì)象。如果在 @Configuration 注解的類中使用 @Bean 注解某個(gè)類對(duì)象的方法,Spring也會(huì)自動(dòng)將注解了 @Bean 的方法注冊(cè)到IOC容器,并進(jìn)行實(shí)例化。 @Configuration 注解本質(zhì)上是個(gè) @Compo

    2023年04月11日
    瀏覽(25)
  • spring復(fù)習(xí):(55)注解配置的情況下@ComponentScan指定的包中的組件是怎么被注冊(cè)到容器的?

    spring復(fù)習(xí):(55)注解配置的情況下@ComponentScan指定的包中的組件是怎么被注冊(cè)到容器的?

    配置類: 主類: 結(jié)論:是在context.refresh()處完成掃描和注冊(cè)的。 fresh()的代碼片段如下: 其中調(diào)用的invokeBeanFactoryPostProcessor代碼如下: 其中調(diào)用的靜態(tài)方法invokeBeanFactoryPostProcessors代碼如下: 其中包含如下代碼片段: invokeBeanDefinitionRegisteyPostProcessor的代碼如下: 其中調(diào)用的

    2024年02月15日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包