真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spring中怎么定義Bean加載順序

這篇文章主要講解了“Spring中怎么定義Bean加載順序”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Spring中怎么定義Bean加載順序”吧!

成都創(chuàng)新互聯(lián)公司是專(zhuān)業(yè)的五通橋網(wǎng)站建設(shè)公司,五通橋接單;提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行五通橋網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

Spring容器載入bean順序是不確定的,Spring框架沒(méi)有約定特定順序邏輯規(guī)范。但Spring保證如果A依賴B(如beanA中有@Autowired B的變量),那么B將先于A被加載。

邏輯判斷

在業(yè)務(wù)層自己控制A,B的初始化順序

構(gòu)造方法依賴

@Component
publicclass DemoA {

    private String name = "demo A";

    public DemoA(DemoB demoB) {
        System.out.println(name);
    }
}

@Component
publicclass DemoB {

    private String name = "demo B";

    public CDemoB() {
        System.out.println(name);
    }
}

這個(gè)時(shí)候構(gòu)造A的時(shí)候就會(huì)先去構(gòu)造B

使用@DependsOn

Spring 中的@DependsOn可以保證被依賴的bean先于當(dāng)前bean被容器創(chuàng)建

@DependsOn注解可以定義在類(lèi)和方法上,意思是我這個(gè)組件要依賴于另一個(gè)組件,也就是說(shuō)被依賴的組件會(huì)比該組件先注冊(cè)到IOC容器中。

類(lèi)上使用注解:

package com.spring.master.spring;

import org.springframework.stereotype.Component;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-22 15:55
 * @describtion 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Component
public class EventSource {

    public EventSource(){
        System.out.println("事件源創(chuàng)建");
    }
}


package com.spring.master.spring.dependson;

import org.springframework.stereotype.Component;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-22 15:56
 * @describtion 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Component
public class EventListener {

    public EventListener(){
        System.out.println("監(jiān)聽(tīng)器創(chuàng)建");
    }
}

package com.spring.master.spring.dependson;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-22 15:57
 * @describtion 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Configuration
@ComponentScan(basePackages = "com.spring.master.spring")
public class SpringConfig {


}


啟動(dòng)服務(wù):
事件源創(chuàng)建
監(jiān)聽(tīng)器創(chuàng)建

備注:
Spring默認(rèn)掃描包時(shí)會(huì)根據(jù)文件在文件夾的位置先后順序掃描加載

********************************************************************************************

使用@DependsOn注解:

package com.spring.master.spring;

import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-22 15:55
 * @describtion 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Component
@DependsOn(value = {"eventListener"})
public class EventSource {

    public EventSource(){
        System.out.println("事件源創(chuàng)建");
    }
}

啟動(dòng)服務(wù):
監(jiān)聽(tīng)器創(chuàng)建
事件源創(chuàng)建
方法上使用注解:

package com.spring.master.spring;

import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-22 15:55
 * @describtion 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
//@Component
//@DependsOn(value = {"eventListener"})
public class EventSource {

    public EventSource(){
        System.out.println("事件源創(chuàng)建");
    }
}


package com.spring.master.spring.dependson;

import org.springframework.stereotype.Component;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-22 15:56
 * @describtion 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
//@Component
public class EventListener {

    public EventListener(){
        System.out.println("監(jiān)聽(tīng)器創(chuàng)建");
    }
}


package com.spring.master.spring.dependson;

import com.spring.master.spring.EventSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-22 15:57
 * @describtion 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Configuration
@ComponentScan(basePackages = "com.spring.master.spring")
public class SpringConfig {

    @Bean
    @DependsOn(value = {"eventListener"})
    public EventSource eventSource(){
        return new EventSource();
    }

    @Bean
    public EventListener eventListener(){
        return new EventListener();
    }

}


啟動(dòng)服務(wù)輸出:
監(jiān)聽(tīng)器創(chuàng)建
事件源創(chuàng)建

BeanFactoryPostProcessor

容器加載bean之前:BeanFactoryPostProcessor 可以允許我們?cè)谌萜骷虞d任何bean之前修改應(yīng)用上下文中的BeanDefinition

在本例中,就可以把A的初始化邏輯放在一個(gè) BeanFactoryPostProcessor 中。
@Component
public class ABeanFactoryPostProcessor implements BeanFactoryPostProcessor {
  @Override
  public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
    A.initA();
  }
}

這種方式把A中的初始化邏輯放到了加載bean之前,很適合加載系統(tǒng)全局配置,但是這種方式中初始化邏輯不能依賴bean的狀態(tài)。

BeanPostProcessor

@Component
publicclass HDemo1 {
    private String name = "h demo 1";

    public HDemo1() {
        System.out.println(name);
    }
}

@Component
publicclass HDemo2 {
    private String name = "h demo 2";

    public HDemo2() {
        System.out.println(name);
    }
}
@Component
publicclass DemoBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements BeanFactoryAware {
    private ConfigurableListableBeanFactory beanFactory;
    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        if (!(beanFactory instanceof ConfigurableListableBeanFactory)) {
            thrownew IllegalArgumentException(
                    "AutowiredAnnotationBeanPostProcessor requires a ConfigurableListableBeanFactory: ">

請(qǐng)將目標(biāo)集中在postProcessBeforeInstantiation,這個(gè)方法在某個(gè) bean 的實(shí)例化之前,會(huì)被調(diào)用,這就給了我們控制 bean 加載順序的機(jī)會(huì)。

感謝各位的閱讀,以上就是“Spring中怎么定義Bean加載順序”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Spring中怎么定義Bean加載順序這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)頁(yè)標(biāo)題:Spring中怎么定義Bean加載順序
本文地址:http://weahome.cn/article/pdgicj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部