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

网友投稿 502 2023-04-07


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 DynamicConfiguraFjymZLJjption

{

@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)

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MyBatis 动态SQL和缓存机制实例详解
下一篇:Java 中This用法的实例详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~