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);
    }
    }
    ---------------------

     
  • 相关阅读:
    谬论之程序猿的眼光看世界
    phpStudy-坑爹的数据库管理器-phpMyAdmin的默认用户名和密码
    解决Delphi 2010启动时出现cannot create xxxxEditorLineEnds.ttr问题
    数据库中增加操作insert into的用法和查询select的用法
    TRichEdit怎样新增的内容到最后一行?
    BCB将RichEdit光标移到最后一行
    怎么把焦点放在RichEdit的最后一行
    Panel自动变颜色
    怎么判断pagecontrol下的TabSheet是否打开还是关闭求答案
    用Setup Factory7.0怎样打包delphi的BDE?
  • 原文地址:https://www.cnblogs.com/vana/p/10860110.html
Copyright © 2011-2022 走看看