zoukankan      html  css  js  c++  java
  • spring 手动注册bean

    //将applicationContext转换为ConfigurableApplicationContext
    ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) SpringContextUtil.getApplicationContext();
     
    // 获取bean工厂并转换为DefaultListableBeanFactory
    DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getBeanFactory();
     
    // 通过BeanDefinitionBuilder创建bean定义
    BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserController.class);
     
    // 设置属性userService,此属性引用已经定义的bean:userService,这里userService已经被spring容器管理了.
    beanDefinitionBuilder.addPropertyReference("userService""userService");
     
    // 注册bean
    defaultListableBeanFactory.registerBeanDefinition("userController", beanDefinitionBuilder.getRawBeanDefinition());
     
     
    UserController userController = (UserController) SpringContextUtil.getBean("userController");
     
    return userController.toAction("动态注册生成调用");
     
    ######################################################################

    注意applicationContext.xml文件的路径配置,按自己项目spring配置文件的路径做相应的调整
    import org.springframework.beans.factory.config.BeanDefinition;
    import org.springframework.beans.factory.support.BeanDefinitionBuilder;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    /**
    * springApplicationContext工具
    */
    public class SpringBeanRegisterUtil {
    private static ApplicationContext context=new
    ClassPathXmlApplicationContext("applicationContext.xml");
    private static ConfigurableApplicationContext configurableContext = (ConfigurableApplicationContext) context;
    private static BeanDefinitionRegistry beanDefinitionRegistry = (DefaultListableBeanFactory) configurableContext.getBeanFactory();

    /**
    * 注册bean
    * @param beanId 所注册bean的id
    * @param className bean的className,
    * 三种获取方式:1、直接书写,如:com.mvc.entity.User
    * 2、User.class.getName
    * 3.user.getClass().getName()
    */
    public static void registerBean(String beanId,String className) {
    // get the BeanDefinitionBuilder
    BeanDefinitionBuilder beanDefinitionBuilder =
    BeanDefinitionBuilder.genericBeanDefinition(className);
    // get the BeanDefinition
    BeanDefinition beanDefinition=beanDefinitionBuilder.getBeanDefinition();
    // register the bean
    beanDefinitionRegistry.registerBeanDefinition(beanId,beanDefinition);
    }

    /**
    * 移除bean
    * @param beanId bean的id
    */
    public static void unregisterBean(String beanId){
    beanDefinitionRegistry.removeBeanDefinition(beanId);
    }

    /**
    * 获取bean
    * @param name bean的id
    * @param <T>
    * @return
    */
    public static <T> T getBean(String name) {
    return (T) context.getBean(name);
    }
    }
    ---------------------

     
  • 相关阅读:
    linux 学习之七-部分ssh命令
    揭秘淘宝286亿海量图片存储与处理架构
    大型网站后台架构的演变
    Linux学习之六-Yum命令的使用
    res://ieframe.dll/acr_error.htm 纯手动解决方法
    VS2013启动项目调试的时候会启动本地IIS
    linux学习之(六)-主机名、网络IP的配置与查看
    deployment.yaml 带同步时区
    Deployment
    mysql.yaml
  • 原文地址:https://www.cnblogs.com/vana/p/10860110.html
Copyright © 2011-2022 走看看