Spring Boot如何动态创建Bean示例代码
前言
本文主要给大家介绍了关于SpringBoot动态创建Bean的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
SpringBoot测试版本:1.3.4.RELEASE
参考代码如下:
packagecom.spring.configuration;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.beans.factory.support.BeanDefinitionBuilder;
importorg.springframework.beans.factory.support.DefaultListableBeanFactory;
importorg.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.ConfigurableApplicationContext;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.jdbc.core.JdbcTemplate;
@Configuration
/**
*这里的conditional是一个可选条件,表示当这个表达式为true的时候,才动态创建bean
*/
@ConditionalOnExpression("${my.configuration.enabled}")
publicclassDynamicConfiguration
{
@Autowired
privateApplicationContextapplicationContext;
/**
*这个方法返回Runnable只是一个幌子,最重要的是执行方法里面的代码
*/
@Bean
publicRunnabledynamicConfiguration()throwsException
{
ConfigurableApplicationContextcontext=(ConfigurableApplicationContext)applicationContext;
DefaultListableBeanFactorybeanFactory=(DefaultListableBeanFactory)context.getBeanFactory();
BeanDefinitionBuilderbeanDefinitionBuilder=BeanDefinitionBuilder.rootBeanDefinition(UserService.class);
/**
*设置属性
*/
beanDefinitionBuilder.addPropertyValue("name","myConfigure");
beanDefinitionBuilder.addPropertyValue("jdbcTemplate",applicationContext.getBean(JdbcTemplate.class));
/**
*注册到spring容器中
*/
beanFactory.registerBeanDefinition("userService",beanDefinitionBuilder.getBeanDefinition());
returnnull;
}
}
classUserService
{
privateStringname;
privateJdbcTemplatejdbcTemplate;
publicStringgetName()
{
returnname;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
publicJdbcTemplategetJdbcTemplate()
{
returnjdbcTemplate;
}
publicvoidsetJdbcTemplate(JdbcTemplatejdbcTemplate)
{
this.jdbcTemplate=jdbcTemplate;
}
}
之后,就可以使用如下方式获取对象了
applicationContext.getBean(UserService.class);
applicationContext.getBean("userService",UserService.class)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。