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)

总结

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

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...