标签:span ini nbu config 加载 util autowire actor override
此种方式注册的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实例并注册,注意必须是单例的,在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); } }
标签:span ini nbu config 加载 util autowire actor override
原文地址:https://www.cnblogs.com/zz4926/p/14694161.html