文档章节

Spring中获取bean

浪子_仗剑走天涯
 浪子_仗剑走天涯
发布于 2016/10/23 13:25
字数 269
阅读 14
收藏 0
import java.lang.reflect.InvocationTargetException;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;
import org.springframework.util.MethodInvoker;

@Service("springBeanUtils")
public class SpringBeanUtils implements ApplicationContextAware {
    private SpringBeanUtils() {
    }

    public void setApplicationContext(ApplicationContext _applicationContext) throws BeansException {
        applicationContext = _applicationContext;
    }

    /**
     * 获取Bean对象
     * 
     * [@param](https://my.oschina.net/u/2303379) name
     *            bean的配置名称
     * [@return](https://my.oschina.net/u/556800) bean对象
     */
    public Object getBean(String name) {
        return applicationContext.getBean(name);
    }

    /**
     * 获取Bean对象
     * 
     * [@param](https://my.oschina.net/u/2303379) name
     *            bean的配置名称
     * [@param](https://my.oschina.net/u/2303379) requiredType
     *            bean的类型
     * @return bean对象
     */
    public <T> T getBean(String name, Class<T> requiredType) {
        return applicationContext.getBean(name, requiredType);
    }

    /**
     * 获取Bean对象
     * 
     * @param requiredType
     *            bean的类型
     * @return bean对象
     */
    public <T> T getBean(Class<T> requiredType) {
        return applicationContext.getBean(requiredType);
    }

    /**
     * 运行Bean中指定名称的方法并返回其返回值
     * 
     * @param beanName
     *            beanName对象
     * @param methodName
     *            方法名
     * @param arguments
     *            参数值
     * @return 运行bean中指定名称的方法的返回值
     */
    public Object invokeBeanMethod(String beanName, String methodName, Object[] arguments) {
        try {
            // 初始化
            MethodInvoker methodInvoker = new MethodInvoker();
            methodInvoker.setTargetObject(getBean(beanName));
            methodInvoker.setTargetMethod(methodName);

            // 设置参数
            if (arguments != null && arguments.length > 0) {
                methodInvoker.setArguments(arguments);
            }

            // 准备方法
            methodInvoker.prepare();

            // 执行方法
            return methodInvoker.invoke();
        } catch (ClassNotFoundException e) {
            logger.error(" ClassNotFoundException ", e);
        } catch (NoSuchMethodException e) {
            logger.error(" NoSuchMethodException ", e);
        } catch (InvocationTargetException e) {
            logger.error(" InvocationTargetException ", e);
        } catch (IllegalAccessException e) {
            logger.error(" IllegalAccessException ", e);
        }

        return null;
    }

    private ApplicationContext applicationContext;
}

© 著作权归作者所有

共有 人打赏支持
浪子_仗剑走天涯
粉丝 8
博文 20
码字总数 7040
作品 0
北京
后端工程师
私信 提问
【死磕 Spring】—– IOC 之分析各 scope 的 bean 创建

原文出自:http://cmsblogs.com 在 Spring 中存在着不同的 scope,默认是 singleton ,还有 prototype、request 等等其他的 scope,他们的初始化步骤是怎样的呢?这个答案在这篇博客中给出。...

chenssy
10/24
0
0
【死磕 Spring】—– IOC 之 IOC 初始化总结

原文出自:http://cmsblogs.com 前面 13 篇博文从源码层次分析了 IOC 整个初始化过程,这篇就这些内容做一个总结将其连贯起来。 在前文提过,IOC 容器的初始化过程分为三步骤:Resource 定位...

chenssy
10/09
0
0
【死磕 Spring】—– IOC 之开启 bean 的加载

原文出自:http://cmsblogs.com (此图来自《Spring 揭秘》) Spring IOC 容器所起的作用如上图所示,它会以某种方式加载 Configuration Metadata,将其解析注册到容器内部,然后回根据这些信息...

chenssy
10/18
0
0
BeanNameAware作用

迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id),或者自己是在...

哲别0
2017/10/24
0
0
基于Groovy实现Spring Bean的动态加载

Spring对Groovy有着良好的支持,能把Groovy实现类作为Bean来使用,在前一篇Blog《Spring对Groovy Bean的支持》有详细的描述http://my.oschina.net/joshuazhan/blog/137940。基于Groovy Bean...

joshuazhan
2013/07/15
0
12

没有更多内容

加载失败,请刷新页面

加载更多

开源软件会被云杀死吗 ?

本文转载云头条,原作者:Michael Stiefel是Reliable Software公司的负责人,是一名软件架构和开发顾问。 文章要点 虽然开源开发不会消失,但商业开源厂商的未来不是很有希望。随着全面管理的...

linuxCool
20分钟前
0
0
OSChina 周三乱弹 —— 谈什么对象?睡什么觉?

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @胖达panda :最肯忘却古人诗,最不屑一顾是相思。分享童丽的单曲《红豆生南国》: 《红豆生南国》- 童丽 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
24分钟前
43
3
stylus

stylus基础教程,stylus实例教程,stylus语法总结

miaojiangmin
今天
3
0
PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
2
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部