博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手动注入bean到spring容器
阅读量:4109 次
发布时间:2019-05-25

本文共 2692 字,大约阅读时间需要 8 分钟。

ApplicationContext applicationContext = SpringContextUtils.getApplicationContext();//将applicationContext转换为ConfigurableApplicationContextConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;// 获取bean工厂并转换为DefaultListableBeanFactoryDefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getBeanFactory();this.defaultListableBeanFactory = defaultListableBeanFactory;String[] beanNamesForType = defaultListableBeanFactory.getBeanNamesForType(PayClient.class);System.out.println("beanNamesForType:" + Arrays.toString(beanNamesForType));// defaultListableBeanFactory.removeBeanDefinition("com.example.zuul.feign.PayClient");defaultListableBeanFactory.removeBeanDefinition(beanNamesForType[0]);// 通过BeanDefinitionBuilder创建bean定义BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(PayClient.class);// 设置属性userService,此属性引用已经定义的bean:userService,这里userService已经被spring容器管理了.// beanDefinitionBuilder.addPropertyReference("payClient", "payClient");// 注册beandefaultListableBeanFactory.registerBeanDefinition("com.example.zuul.feign.PayClient", beanDefinitionBuilder.getRawBeanDefinition());Object bean = SpringContextUtils.getBean(PayClient.class);
package com.example.zuul;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;/** * 获取ApplicationContext和Object的工具类 */@Component@SuppressWarnings({ "rawtypes", "unchecked" })public class SpringContextUtils implements ApplicationContextAware {    private static ApplicationContext applicationContext;    /**     * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.     */    public void setApplicationContext(ApplicationContext applicationContext) {        SpringContextUtils.applicationContext = applicationContext; // NOSONAR    }    /**     * 取得存储在静态变量中的ApplicationContext.     */    public static ApplicationContext getApplicationContext() {        checkApplicationContext();        return applicationContext;    }    private static void checkApplicationContext() {        if (applicationContext == null) {            throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");        }    }    /**     * 获取bean     *     * @param name bean的id     * @param 
* @return */ public static
T getBean(String name) { return (T) applicationContext.getBean(name); } //通过类型获取上下文中的bean public static Object getBean(Class
requiredType) { return applicationContext.getBean(requiredType); }}

转载地址:http://cansi.baihongyu.com/

你可能感兴趣的文章
【题解】Luogu P2766 最长不下降子序列问题
查看>>
Treap学习总结
查看>>
HTTP——学习笔记(1)
查看>>
在采用vue-cli Post Get
查看>>
git 提交oschina
查看>>
网络编程——TCP协议的三次握手和四次挥手
查看>>
制作根文件系统的经验
查看>>
最小二乘法(ZZ)
查看>>
爬虫-Beautiful Soup模块
查看>>
多路访问网络中的挑战
查看>>
etcd:从应用场景到实现原理的全方位解读
查看>>
mysql-mode问题
查看>>
Android service里面启动activity和alertdialog .
查看>>
PHPExcel读取excel文件示例
查看>>
常见浏览器的兼容问题
查看>>
iOS开发经验总结
查看>>
Java重定向标准输入/输出
查看>>
homework1
查看>>
HTML控件ID和NAME属性的区别,以及如何在asp.net页面的.CS文件中获得.ASPX页面中HTML控件的值...
查看>>
noip 2016 Day T1 组合数
查看>>