Spring Boot如何動態(tài)創(chuàng)建Bean示例代碼
前言
本文主要給大家介紹了關(guān)于Spring Boot動態(tài)創(chuàng)建Bean的相關(guān)內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
SpringBoot測試版本:1.3.4.RELEASE
參考代碼如下:
package com.spring.configuration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; @Configuration /** * 這里的conditional是一個可選條件,表示當這個表達式為true的時候,才動態(tài)創(chuàng)建bean */ @ConditionalOnExpression("${my.configuration.enabled}") public class DynamicConfiguration { @Autowired private ApplicationContext applicationContext; /** * 這個方法返回Runnable只是一個幌子,最重要的是執(zhí)行方法里面的代碼 */ @Bean public Runnable dynamicConfiguration() throws Exception { ConfigurableApplicationContext context = (ConfigurableApplicationContext)applicationContext; DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)context.getBeanFactory(); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(UserService.class); /** * 設(shè)置屬性 */ beanDefinitionBuilder.addPropertyValue("name", "myConfigure"); beanDefinitionBuilder.addPropertyValue("jdbcTemplate", applicationContext.getBean(JdbcTemplate.class)); /** * 注冊到spring容器中 */ beanFactory.registerBeanDefinition("userService", beanDefinitionBuilder.getBeanDefinition()); return null; } } class UserService { private String name; private JdbcTemplate jdbcTemplate; public String getName() { return name; } public void setName(String name) { this.name = name; } public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } }
之后,就可以使用如下方式獲取對象了
applicationContext.getBean(UserService.class); applicationContext.getBean("userService", UserService.class)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
java使用stream判斷兩個list元素的屬性并輸出方式
這篇文章主要介紹了java使用stream判斷兩個list元素的屬性并輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06java實現(xiàn)騰訊ocr圖片識別接口調(diào)用
這篇文章主要為大家詳細介紹了java實現(xiàn)騰訊ocr圖片識別接口調(diào)用,拍車牌識別車牌號功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11java使用Dijkstra算法實現(xiàn)單源最短路徑
這篇文章主要為大家詳細介紹了java使用Dijkstra算法實現(xiàn)單源最短路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01解決使用json-lib包實現(xiàn)xml轉(zhuǎn)json時空值被轉(zhuǎn)為空中括號的問題
網(wǎng)上能查到的xml轉(zhuǎn)json的jar包大部分是net.sf.json-lib,但是JSON json =xmlSerializer.read(xml); 方法會出現(xiàn)將空值轉(zhuǎn)化為[]的問題,下面為大家提供兩種解決方法2018-03-03IDEA在plugins里搜不到mybatisx插件的解決方法
本文主要介紹了IDEA在plugins里搜不到mybatisx插件的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06