前言

本文主要给大家介绍了关于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)

总结

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

java动态创建bean的意义_Spring Boot如何动态创建Bean示例代码相关推荐

  1. java dsl框架_Spring Boot整合QueryDSL的实现示例

    之前研究Jooq,今天来研究一下搭配JPA的QueryDSL吧. 简介 Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句.它采用API代替拼凑字符串来构造查询语句.可跟 Hibe ...

  2. bean的作用域_Spring 框架基础(02):Bean的生命周期,作用域,装配总结

    一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为Bean对象. 1.XML格式装配 Spring最传统的Be ...

  3. java socket 重连复用_Java Socket编程基础及深入讲解(示例代码)

    Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...

  4. Java Web--HTML、CSS、JavaScript详细学习笔记(内含丰富示例代码)

    ** Java Web–HTML.CSS.JavaScript学习笔记 ** HTML(Hyper Text Markup Language超文本标记语言):控制的是页面的内容,是由标签组成的语言,能 ...

  5. java 批量写入文件_Java批量写入文件和下载图片的示例代码

    很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...

  6. java多线程下载源码_Java多线程文件分片下载实现的示例代码

    多线程下载介绍 多线程下载技术是很常见的一种下载方案,这种方式充分利用了多线程的优势,在同一时间段内通过多个线程发起下载请求,将需要下载的数据分割成多个部分,每一个线程只负责下载其中一个部分,然后将下 ...

  7. java批量下载图片_Java批量写入文件和下载图片的示例代码

    很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...

  8. java获取网络ip地址_Java获取电脑真实IP地址的示例代码

    /** * @author yins * @date 2018年8月12日下午9:53:58 */ import java.net.Inet4Address; import java.net.Inet ...

  9. java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现

    工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...

最新文章

  1. php 生成器 教程,PHP扩展生成器_PHP教程
  2. LinearLayout的一些注意事项
  3. SQL高级---SQL UNION 和 UNION ALL 操作符
  4. 保研计算机辅助翻译,本科2013级推免生寄语
  5. hdu5692 Snacks dfs序+线段树
  6. easyui combobox下拉框 的取value text的API
  7. GitHub 开源官方命令行工具登顶 TOP1,5 分钟极速上手!
  8. 用dsp的c54x汇编语言编写4位数的按位输出和计算,DSP实验三实验四(精).doc
  9. 程序设计c语言答案pdf,C语言程序设计习题解答.pdf
  10. fiddler4安装教程以及手机下载证书时报错 no root certificate was found解决方法
  11. 如何免费下载DEM数据
  12. 解决删除文件时出现“无法读取源文件或磁盘”的办法
  13. 一个老乞丐一句话震惊中国人...............
  14. 代码雨【code rain】 cmd 命令快速实现 + java 实现
  15. CF1694B Paranoid String 构造/子串计数
  16. [深度学习]动手学深度学习笔记-11
  17. 蒙太奇服务器维修,蒙太奇服务器多台互连导片方法.pdf
  18. Python语法--File文件处理
  19. 命中率 计算机组成原理,计算机组成原理-求命中率.pptx
  20. 微信小程序跳转公众号(引导关注)之 使用公众号消息

热门文章

  1. Python 机器学习——线性代数和矩阵运算:从matlab迁移到python
  2. 计算机网络 第七版 谢,计算机网络-谢仁-第7版-01章.pptx
  3. java 控制台输出到gui_java – 如何将类似窗口的“控制台”添加到GUI?
  4. threadlocal使用场景_ThreadLocal有没有内存泄漏?源码给你安排得明明白白
  5. 学计算机的能看出批图吗,P图P的好,女朋友满街跑,P图先学计算机,清华和这些学校少不了...
  6. 免费python全套视频教学-有哪些优质的Python全系列视频教程推荐,免费的收费的都可以?...
  7. python能做什么工作-Python学完工作不好找?看看数据分析可视化都可以做什么
  8. python基础代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)
  9. 编程软件python-python编程用哪个软件
  10. python代码翻译器-【分享】python 翻译器,爬取百度翻译,并附上源码