java动态创建bean的意义_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)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
java动态创建bean的意义_Spring Boot如何动态创建Bean示例代码相关推荐
- java dsl框架_Spring Boot整合QueryDSL的实现示例
之前研究Jooq,今天来研究一下搭配JPA的QueryDSL吧. 简介 Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句.它采用API代替拼凑字符串来构造查询语句.可跟 Hibe ...
- bean的作用域_Spring 框架基础(02):Bean的生命周期,作用域,装配总结
一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为Bean对象. 1.XML格式装配 Spring最传统的Be ...
- java socket 重连复用_Java Socket编程基础及深入讲解(示例代码)
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- Java Web--HTML、CSS、JavaScript详细学习笔记(内含丰富示例代码)
** Java Web–HTML.CSS.JavaScript学习笔记 ** HTML(Hyper Text Markup Language超文本标记语言):控制的是页面的内容,是由标签组成的语言,能 ...
- java 批量写入文件_Java批量写入文件和下载图片的示例代码
很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...
- java多线程下载源码_Java多线程文件分片下载实现的示例代码
多线程下载介绍 多线程下载技术是很常见的一种下载方案,这种方式充分利用了多线程的优势,在同一时间段内通过多个线程发起下载请求,将需要下载的数据分割成多个部分,每一个线程只负责下载其中一个部分,然后将下 ...
- java批量下载图片_Java批量写入文件和下载图片的示例代码
很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...
- java获取网络ip地址_Java获取电脑真实IP地址的示例代码
/** * @author yins * @date 2018年8月12日下午9:53:58 */ import java.net.Inet4Address; import java.net.Inet ...
- java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现
工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...
最新文章
- php 生成器 教程,PHP扩展生成器_PHP教程
- LinearLayout的一些注意事项
- SQL高级---SQL UNION 和 UNION ALL 操作符
- 保研计算机辅助翻译,本科2013级推免生寄语
- hdu5692 Snacks dfs序+线段树
- easyui combobox下拉框 的取value text的API
- GitHub 开源官方命令行工具登顶 TOP1,5 分钟极速上手!
- 用dsp的c54x汇编语言编写4位数的按位输出和计算,DSP实验三实验四(精).doc
- 程序设计c语言答案pdf,C语言程序设计习题解答.pdf
- fiddler4安装教程以及手机下载证书时报错 no root certificate was found解决方法
- 如何免费下载DEM数据
- 解决删除文件时出现“无法读取源文件或磁盘”的办法
- 一个老乞丐一句话震惊中国人...............
- 代码雨【code rain】 cmd 命令快速实现 + java 实现
- CF1694B Paranoid String 构造/子串计数
- [深度学习]动手学深度学习笔记-11
- 蒙太奇服务器维修,蒙太奇服务器多台互连导片方法.pdf
- Python语法--File文件处理
- 命中率 计算机组成原理,计算机组成原理-求命中率.pptx
- 微信小程序跳转公众号(引导关注)之 使用公众号消息
热门文章
- Python 机器学习——线性代数和矩阵运算:从matlab迁移到python
- 计算机网络 第七版 谢,计算机网络-谢仁-第7版-01章.pptx
- java 控制台输出到gui_java – 如何将类似窗口的“控制台”添加到GUI?
- threadlocal使用场景_ThreadLocal有没有内存泄漏?源码给你安排得明明白白
- 学计算机的能看出批图吗,P图P的好,女朋友满街跑,P图先学计算机,清华和这些学校少不了...
- 免费python全套视频教学-有哪些优质的Python全系列视频教程推荐,免费的收费的都可以?...
- python能做什么工作-Python学完工作不好找?看看数据分析可视化都可以做什么
- python基础代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)
- 编程软件python-python编程用哪个软件
- python代码翻译器-【分享】python 翻译器,爬取百度翻译,并附上源码