亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在實例化階段之前/期間檢索 Bean 類

在實例化階段之前/期間檢索 Bean 類

RISEBY 2022-12-21 13:58:20
在 Spring 應用程序中,可以使用applicationContext.getBeansOfType(Object.class). 這當然只有在創建了所有 Beans 之后才有可能。所以,如果我在一個 Bean 的構造函數中調用這個方法,我必須很幸運,成為最后一個被創建的 Bean,才能訪問所有這些 Bean。據我了解 Spring Beans 的生命周期,在 Bean 初始化之前有一個創建 BeanDefinitions 的階段。如何在 Bean 的構造函數中檢索所有創建的 BeanDefinitions?我還可以檢索Class那些 BeanDefinitions 的類型嗎?BeanDefinition類型似乎只提供“此 bean 定義的當前 bean 類名”?;蛘呤窃跇嬙焱晁?Bean 之后獲得這些類型的唯一方法(例如@PostConstruct)?
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

也許這段代碼可以幫助


    for (String name : applicationContext.getBeanFactory().getBeanDefinitionNames()) {

        BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);

        String className = beanDefinition.getBeanClassName();

        Class<?> clazz = Class.forName(className);

    }

循環讓你得到所有的BeanDefinitions 然后你為每個加載類并做你想做的事?


順便說一句,這可能不是使用 Spring 的好方法,但它會起作用。


查看完整回答
反對 回復 2022-12-21
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

您可以創建最后一個 bean,例如將它放在@Configuration具有最小初始化順序的類中,這樣它就是最后一個帶有 的 bean @Order(Ordered.LOWEST_PRECEDENCE),就是這樣:


@Configuration

@Order(Ordered.LOWEST_PRECEDENCE)

public class Last {


    @Autowired

    ApplicationContext applicationContext;


    @Bean

    public String lastBean() {


        applicationContext.getBeanDefinitionNames();    //retrive all created BeanDefinitions in the constructor of a Bean


        applicationContext.getBeansOfType(Object.class); //retrive the types (as Class) 


        return "lastBean";

    }


}


查看完整回答
反對 回復 2022-12-21
  • 2 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號