Spring Boot如何動態(tài)創(chuàng)建Bean示例代碼
更新時間:2017年09月07日 14:23:32 作者:西夏一品堂
這篇文章主要給大家介紹了關于Spring Boot如何動態(tài)創(chuàng)建Bean的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
前言
本文主要給大家介紹了關于Spring Boot動態(tài)創(chuàng)建Bean的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
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);
/**
* 設置屬性
*/
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)
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
基于Java HttpClient和Htmlparser實現(xiàn)網絡爬蟲代碼
這篇文章主要介紹了基于Java HttpClient和Htmlparser實現(xiàn)網絡爬蟲代碼的相關資料,需要的朋友可以參考下2015-12-12
解決spring-cloud-config 多服務共享公共配置的問題
這篇文章主要介紹了解決spring-cloud-config 多服務共享公共配置的問題,本文通過多種方法給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
JAVA使用ElasticSearch查詢in和not in的實現(xiàn)方式
今天小編就為大家分享一篇關于JAVA使用Elasticsearch查詢in和not in的實現(xiàn)方式,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

