`
lynnwong
  • 浏览: 36700 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring 获取bean的几种方法

    博客分类:
  • java
阅读更多

spring 获取bean的几种方法

  1. 实现BeanFactoryAware

    public class ServiceLocator implements BeanFactoryAware {

        private static BeanFactory beanFactory;
    
        @Override
        public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
            ServiceLocator.beanFactory = beanFactory;
        }
    
        /**
         * 根据提供的bean名称得到相应的服务类
         * 
         * @param servName
         * bean名称
         */
        public static Object getService(String servName) {
            return beanFactory.getBean(servName);
        }
    
    }
    

    spring配置文件

    <bean id="serviceLocator" class="com.taobao.appcenter.common.ServiceLocator" lazy-init="false"/>
    
  2. 实现ApplicationContextAware

    public class SpringContextsUtil implements ApplicationContextAware {
    
        private static ApplicationContext applicationContext;    //Spring context   
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            SpringContextsUtil.applicationContext = applicationContext;
        }
    
        /**
          * @return ApplicationContext
          */
          public static ApplicationContext getApplicationContext() {
            return applicationContext;
          }
    
          /**
          * 获取对象  
          * @param name
          * @return Object 一个以所给名字注册的bean的实例
          * @throws BeansException
          */
          public static Object getBean(String name) throws BeansException {
            return applicationContext.getBean(name);
          }
    }
    

    spring xml配置文件

    <bean id="springContext" class="com.taobao.appcenter.common.SpringContext" lazy-init="false"/>
    
  3. 通过servlet 或listener设置spring的ApplicationContext,以便后来引用,这个是针对web 工程的

        public class SpringContext {
        private static ApplicationContext applicationContext; // Spring应用上下文环境
    
        public static void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            SpringContext.applicationContext = applicationContext;
        }
    
        /**
         * @return ApplicationContext
         */
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        public static Object getBean(String name) throws BeansException {
            return applicationContext.getBean(name);
        }
    }
    

    上面的SpingContext谁没实现任何接口的,不是回调的方式。而是在listener或者servlet中set进来

    public class SpringContextLoaderListener extends ContextLoaderListener {
    
    
        public void contextInitialized(ServletContextEvent event){
            super.contextInitialized(event);
            SpringContext.setApplicationContext(WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()));
        }
    
    
    }
    

    替换web.xml文件的listener为上面的文件

    <listener>
        <listener-class>com.taobao.appcenter.common.SpringContextLoaderListener</listener-class>
    </listener>
    

    servlet的代码如下

    public class SpringContextLoaderServlet extends ContextLoaderServlet {
     private ContextLoader contextLoader;
        public void init() throws ServletException {
            this.contextLoader = createContextLoader();
            SpringContext.setApplicationContext(this.contextLoader.initWebApplicationContext(getServletContext()));
        }
    }
    

    然后配置web.xml中的servlt和mapping即可。

  4. 调用

    由于使用的都是静态函数,使用getBean(Stirng name)或者getService(String serviceName)就可以获得xml配置的业务自己bean。

分享到:
评论

相关推荐

    几种spring获取bean的方法.txt

    几种spring获取bean的方法,包含实现的代码,非常详细哦!!!!

    Java获取Bean的几种方式.pdf

    介绍了Java获取Bean容器的几种常见调用方式,其中详细写出了如何实现ApplicationContextAware 接口来获取Bean容器的工具类

    Spring在代码中获取bean的几种方式.rar

    Spring在代码中获取bean的几种方式.rar

    Spring在代码中获取bean的方法小结

    在工作中有时候我们需要在非spring依赖注入或管理的类中获取service、dao等bean对象,这时候用@Autowired和@Resource显然是不行的,那么下面这篇文章就给大家了整理几种获取bean的方式,对大家的学习和工作具有一定...

    Spring在代码中获取bean的几种方式详解

    主要介绍了Spring在代码中获取bean的几种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring_Framework_ API_5.0.5 (CHM格式)

    Spring5 是一个重要的版本,距离Spring...随着 Java、JavaEE 和其他一些框架基准版本的增加,SpringFramework5 取消了对几个框架的支持。例如: Portlet Velocity JasperReports XMLBeans JDO Guava

    Spring in Action(第2版)中文版

    2.5.2利用工厂方法来创建bean 2.5.3初始化和销毁bean 2.6小结 第3章高级bean装配 3.1声明父bean和子bean 3.1.1抽象基bean类型 3.1.2抽象共同属性 3.2方法注入 3.2.1基本的方法替换 3.2.2获取器注入 3.3...

    Spring in Action(第二版 中文高清版).part2

    2.5.2 利用工厂方法来创建Bean 2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入 3.2.1 基本的方法替换 3.2.2 获取器...

    Spring in Action(第二版 中文高清版).part1

    2.5.2 利用工厂方法来创建Bean 2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入 3.2.1 基本的方法替换 3.2.2 获取器...

    ssh(structs,spring,hibernate)框架中的上传下载

    Spring针对几个著名的Web服务器的数据源提供了相应的JDBC抽取器:  •WebLogic:WebLogicNativeJdbcExtractor  •WebSphere:WebSphereNativeJdbcExtractor  •JBoss:JBossNativeJdbcExtractor  在定义了JDBC...

    springmybatis

    下面对这几个配置文件解释下: 1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 ...

    eclipse安卓开发必备工具

    我一直以为类的私有构造函数、属性、方法除了类自身其他类是无法访问的,前几天正好学习Spring框架,在学习Spring框架基础 Bean包时,写了一个简单的例子,类似如下: package study.spring.bean; public class ...

    千方百计笔试题大全

    70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73...

    java面试宝典

    70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73...

    java面试题

    51.5. java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 25 52. 数据连接池 25 52.1. 连接池的基本原理: 25 52.2. 连接池的工作机制 25 52.3. 建立连接池 26 ...

    Java常见面试题208道.docx

    96.spring 支持几种 bean 的作用域? 97.spring 自动装配 bean 有哪些方式? 98.spring 事务实现方式有哪些? 99.说一下 spring 的事务隔离? 100.说一下 spring mvc 运行流程? 101.spring mvc 有哪些组件? 102.@...

    J2EE面试题

    3:说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法 4:如何给weblogic指定大小的内存?如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 三,代码题 1:请写出JavaMail发送...

    Java语言基础下载

    线程中断/恢复的几种方式 178 创建线程的两种方式 179 线程的控制 180 实例分析 182 内容总结 189 独立实践 190 第十二章:高级I/O流 192 学习目标 192 I/O基础知识 193 字节流 193 字符流 194 节点流 194 过程流 ...

Global site tag (gtag.js) - Google Analytics