91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Bean的優先加載方法怎么實現

發布時間:2021-12-23 11:31:18 來源:億速云 閱讀:652 作者:iii 欄目:大數據

這篇文章主要介紹“Spring Bean的優先加載方法怎么實現”,在日常操作中,相信很多人在Spring Bean的優先加載方法怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring Bean的優先加載方法怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在日常的業務開發中,絕大多數我們都是不關注 bean 的加載順序,然而如果在某些場景下,當我們希望某個 bean 優于其他的 bean 被實例化時,往往并沒有我們想象中的那么簡單。

啟動類指定方式

在實際的 SpringBoot 開發中,我們知道都會有一個啟動類,如果希望某個類被優先加載,一個成本最低的簡單實現,就是在啟動類里添加上依賴

@SpringBootApplication
publicclass Application {

    // 使用構造方法的方式來優先加載DemoBean
    public Application(DemoBean demoBean) {
        demoBean.print();
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

請注意上面的構造方法,如果我們希望在應用啟動之前,demoBean就已經被加載了,那就讓 Application 強制依賴它,所以再 Application 的 bean 初始化之前,肯定會優先實例化demoBean

InstantiationAwareBeanPostProcessorAdapter方式

借助InstantiationAwareBeanPostProcessorAdapter來實現在 bean 實例化之前優先加載目標 bean。

publicclass ClientBeanProcessor extends InstantiationAwareBeanPostProcessorAdapter implements BeanFactoryAware {

    private ConfigurableListableBeanFactory beanFactory;

    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        if (!(beanFactory instanceof ConfigurableListableBeanFactory)) {
            thrownew IllegalArgumentException(
                    "AutowiredAnnotationBeanPostProcessor requires a ConfigurableListableBeanFactory: ">

上面的實現比較簡單,借助beanFactory#getBean來手動觸發 bean 的實例,通過實現BeanFactoryAware接口來獲取BeanFactory,因為實現InstantiationAwareBeanPostProcessor接口的類會優先于 Bean 被實例,以此來間接的達到我們的目的

接下來的問題就是如何讓它生效了,我們這里使用 Import 注解來實現

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({ClientAutoConfiguration.class, ClientBeanProcessor.class})
public@interface EnableOrderClient {
}
package com.spring.master.spring.bean.initbean;

import lombok.Getter;
import org.springframework.core.env.Environment;

import javax.annotation.PostConstruct;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-25 11:58
 * @describtion 業精于勤,荒于嬉;行成于思,毀于隨。
 */
public class DatasourceLoader {

    @Getter
    private String mode;

    public DatasourceLoader(Environment environment) {
        this.mode = environment.getProperty("config.save.mode");
        System.out.println("init DatasourceLoader for:" + mode);
    }

    @PostConstruct
    public void loadResourcres() {
        System.out.println("開始初始化資源");
    }
}


package com.spring.master.spring.bean.initbean;

import org.springframework.stereotype.Component;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-25 12:01
 * @describtion 業精于勤,荒于嬉;行成于思,毀于隨。
 */
@Component
public class DemoBean {

    public DemoBean() {
        System.out.println("demo bean init!");
    }

    public void print() {
        System.out.println("print demo bean ");
    }
}
package com.spring.master.spring.bean.initbean;

import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

/**
 * @author Huan Lee
 * @version 1.0
 * @date 2020-09-25 11:59
 * @describtion 業精于勤,荒于嬉;行成于思,毀于隨。
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({ClientAutoConfiguration.class, ClientBeanProcessor.class})
public @interface EnableOrderClient {
}
package com.spring.master;

import com.spring.master.spring.bean.initbean.DemoBean;
import com.spring.master.spring.bean.initbean.EnableOrderClient;
import com.spring.master.spring.bean.lifecycle.Person;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

@EnableOrderClient
@SpringBootApplication
public class SpringMasterApplication {

	public SpringMasterApplication(DemoBean demoBean) {
		demoBean.print();
	}

	public static void main(String[] args) {
		SpringApplication.run(SpringMasterApplication.class, args);

	}
}

啟動服務輸出:
init DatasourceLoader for:null
開始初始化資源
com.spring.master.spring.bean.initbean.DatasourceLoader@458342d3
demo bean init!
print demo bean

到此,關于“Spring Bean的優先加載方法怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贵德县| 陆良县| 临海市| 河西区| 定兴县| 黄陵县| 永康市| 枣庄市| 滁州市| 巴里| 睢宁县| 穆棱市| 磐安县| 顺义区| 吉木乃县| 东莞市| 溆浦县| 诏安县| 鲁山县| 怀柔区| 会泽县| 大石桥市| 札达县| 安远县| 家居| 利津县| 万宁市| 瓦房店市| 偃师市| 静宁县| 清徐县| 石柱| 奎屯市| 专栏| 曲周县| 乐陵市| 隆安县| 莱阳市| 赣州市| 太仆寺旗| 崇明县|