java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码

本文详细介绍了在SpringBoot中如何动态创建Bean,通过示例代码展示了利用`BeanDefinitionBuilder`注册Bean的过程,并提供了获取Bean的方法。适用于需要在运行时动态配置应用的场景。
摘要由CSDN通过智能技术生成

java相关:Spring Boot如何动态创建Bean示例代码

发布于 2020-3-20|

复制链接

摘记: 前言本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。SpringBoot测试版本:1.3.4.R ..

前言本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。SpringBoot测试版本:1.3.4.RELEASE参考代码如下:

```java

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;

}

}

```

之后,就可以使用如下方式获取对象了

```java

applicationContext.getBean(UserService.class);

applicationContext.getBean("userService", UserService.class)

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值