源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-06-05 02:55 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Spring Boot如何动态创建Bean示例代码
[b]前言[/b] 本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 [b]SpringBoot测试版本:[/b]1.3.4.RELEASE [b]参考代码如下:[/b]
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; 
 } 
} 
[b]之后,就可以使用如下方式获取对象了[/b]
applicationContext.getBean(UserService.class);
applicationContext.getBean("userService", UserService.class)
[b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部