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

java相关:Spring Boot如何动态创建Bean示例代码发布于 2020-3-20|复制链接摘记: 前言本文主要给大家介绍了关于Spring Boot动

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)

```