Spring 自定义Bean 实例获取

Posted ^梦幻星空^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 自定义Bean 实例获取相关的知识,希望对你有一定的参考价值。

 一、通过指定配置文件获取, 对于Web程序而言,我们启动spring容器是通过在web.xml文件中配置,这样相当于加载了两次spring容器

ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId"); 

二、通过Spring提供的工具类获取ApplicationContext对象

ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
MyService service1 = (MyService)ac1.getBean("bean1");//这是beanId. 
MyService service2 = (MyService)ac2.getBean("bean2");

  这种方式明显有很大的漏洞,其一:需要request对象,其二:很难封装一个Java工具类

三、实现接口ApplicationContextAware, 或继承实现ApplicationContextAware接口的类

package com.zxguan;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ApplicationObjectSupport;

/**
 * @author zxguan
 * @description
 * @create 2018-01-29 14:54
 */
public class SpringTool extends ApplicationObjectSupport {

    private static ApplicationContext applicationContext = null;

    @Override
    protected void initApplicationContext(ApplicationContext context) throws BeansException {
        super.initApplicationContext(context);
        if (null == SpringTool.applicationContext) {
            SpringTool.applicationContext = context;
        }
    }

    public static ApplicationContext getAppContext() {
        return applicationContext;
    }

    public static Object getBean(String beanId){
        return getAppContext().getBean(beanId);
    }
}

  还需将类 SpringTool 交由 Spring容器管理

以上是关于Spring 自定义Bean 实例获取的主要内容,如果未能解决你的问题,请参考以下文章

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Spring——管理Bean的生命周期

自定义注解通过spring获取Bean

如何在线程中获取spring 管理的bean

Spring注解学习总结-老版本

看完这篇自己都可以写Spring IOC 容器 Bean 对象实例化--乐字节java