Spring Boot如何动态创建Bean示例代码

 更新时间:2017年09月07日 14:23:32   作者:西夏一品堂  
这篇文章主要给大家介绍了关于Spring Boot如何动态创建Bean的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言

本文主要给大家介绍了关于Spring Boot动态创建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的时候,才动态创建bean 
 */ 
@ConditionalOnExpression("${my.configuration.enabled}") 
public class DynamicConfiguration 
{ 
 @Autowired 
 private ApplicationContext applicationContext; 
  
 /** 
  * 这个方法返回Runnable只是一个幌子,最重要的是执行方法里面的代码 
  */ 
 @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)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • IDEA导入jar包的完整实现步骤

    IDEA导入jar包的完整实现步骤

    由于导入jar包项目存在很多不确定的问题,导致每次都需要调试、配置好多遍,对此特意记录下来,这篇文章主要给大家介绍了关于IDEA导入jar包的相关资料,需要的朋友可以参考下
    2024-01-01
  • 基于Java HttpClient和Htmlparser实现网络爬虫代码

    基于Java HttpClient和Htmlparser实现网络爬虫代码

    这篇文章主要介绍了基于Java HttpClient和Htmlparser实现网络爬虫代码的相关资料,需要的朋友可以参考下
    2015-12-12
  • 解决spring-cloud-config 多服务共享公共配置的问题

    解决spring-cloud-config 多服务共享公共配置的问题

    这篇文章主要介绍了解决spring-cloud-config 多服务共享公共配置的问题,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 基于jdbc处理Clob的使用介绍

    基于jdbc处理Clob的使用介绍

    本篇文章是对jdbc处理Clob的使用进行了分析介绍,需要的朋友参考下
    2013-05-05
  • SpringSecurity 表单登录的实现

    SpringSecurity 表单登录的实现

    本文主要介绍了SpringSecurity 表单登录的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 详解SpringMVC的两种实现方式

    详解SpringMVC的两种实现方式

    这篇文章主要介绍了SpringMVC的两种实现方式,方式一是通过实现Controller接口,方式二是使用注解开发,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Java字节流 从文件输入输出到文件过程解析

    Java字节流 从文件输入输出到文件过程解析

    这篇文章主要介绍了Java字节流 从文件输入 输出到文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 如何配置Eclipse实现定制登录界面

    如何配置Eclipse实现定制登录界面

    本文介绍了如何配置Eclipse实现定制登录界面,每一步的讲解都很细致,感兴趣的小伙伴可以阅读一下
    2015-07-07
  • java之阻塞队列BlockingQueue解析

    java之阻塞队列BlockingQueue解析

    这篇文章主要介绍了java之阻塞队列BlockingQueue解析,阻塞队列是一种线程安全的数据结构,用于在多线程环境下进行数据交换,它提供了一种阻塞的机制,当队列为空时,消费者线程将被阻塞,直到队列中有数据可供消费,需要的朋友可以参考下
    2023-10-10
  • JAVA使用ElasticSearch查询in和not in的实现方式

    JAVA使用ElasticSearch查询in和not in的实现方式

    今天小编就为大家分享一篇关于JAVA使用Elasticsearch查询in和not in的实现方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论