码迷,mamicode.com
首页 > 编程语言 > 详细

springboot 手动创建bean实例并注册

时间:2021-04-24 13:12:04      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:span   ini   nbu   config   加载   util   autowire   actor   override   

手动注册bean

此种方式注册的bean在调用时将由spring进行创建,相当于延迟加载bean

 


import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;



@Component
public class ApplicationContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext context) throws BeansException { applicationContext=context; } /** * 动态注入bean * @param requiredType 注入类 * @param beanName bean名称 */ public static Object registerBean(Class<?> requiredType,String beanName){ //将applicationContext转换为ConfigurableApplicationContext ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext; //获取BeanFactory DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getAutowireCapableBeanFactory(); //创建bean信息. BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(requiredType); //动态注册bean. defaultListableBeanFactory.registerBeanDefinition(beanName, beanDefinitionBuilder.getBeanDefinition()); //获取动态注册的bean. return configurableApplicationContext.getBean(requiredType); } }

 

  

手动创建bean实例

此种方式允许手动创建单例bean实例并注册,注意必须是单例的,在spring调用时,会将手动创建的bean直接注入到调用方。


import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;



@Component
public class ApplicationContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext context) throws BeansException { applicationContext=context; } /** * 动态注入单例bean实例 * @param beanName bean名称 * @param singletonObject 单例bean实例 * @return 注入实例 */ public static Object registerSingletonBean(String beanName,Object singletonObject){ //将applicationContext转换为ConfigurableApplicationContext ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext; //获取BeanFactory DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getAutowireCapableBeanFactory(); //动态注册bean. defaultListableBeanFactory.registerSingleton(beanName,singletonObject); //获取动态注册的bean. return configurableApplicationContext.getBean(beanName); } }

 

  

 

springboot 手动创建bean实例并注册

标签:span   ini   nbu   config   加载   util   autowire   actor   override   

原文地址:https://www.cnblogs.com/zz4926/p/14694161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!