首页 > 编程 > Java > 正文

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

2019-11-26 11:27:21
字体:
来源:转载
供稿:网友

前言

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

总结

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表