Spring Boot如何動態(tài)創(chuàng)建Bean示例代碼
前言
本文主要給大家介紹了關(guān)于Spring Boot動態(tài)創(chuàng)建Bean的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
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是一個可選條件,表示當(dāng)這個表達(dá)式為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)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
java使用stream判斷兩個list元素的屬性并輸出方式
這篇文章主要介紹了java使用stream判斷兩個list元素的屬性并輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Java二進(jìn)制操作(動力節(jié)點(diǎn)Java學(xué)院整理)
這篇文章給大家介紹了java二進(jìn)制操作技巧,包括移位、位運(yùn)算操作符等相關(guān)知識點(diǎn),非常不錯,感興趣的朋友參考下吧2017-03-03
java實(shí)現(xiàn)騰訊ocr圖片識別接口調(diào)用
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)騰訊ocr圖片識別接口調(diào)用,拍車牌識別車牌號功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11
java使用Dijkstra算法實(shí)現(xiàn)單源最短路徑
這篇文章主要為大家詳細(xì)介紹了java使用Dijkstra算法實(shí)現(xiàn)單源最短路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
解決使用json-lib包實(shí)現(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-03
java中 Set與Map排序輸出到Writer詳解及實(shí)例
這篇文章主要介紹了 java中 Set與Map排序輸出到Writer詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03
IDEA在plugins里搜不到mybatisx插件的解決方法
本文主要介紹了IDEA在plugins里搜不到mybatisx插件的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

