`
zhan19861022
  • 浏览: 871 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Spring容器加载方法

 
阅读更多

    最近项目中采用了springmvc框架作为控制层,关于如果在controller中获取spring容器中的bean实例,遇到了点问题。

    很早以前的一个版本是有个静态工厂类加载了spring容器,具体代码如下:

 

 private static BeanFactory beanFactory = null;
	static{	
		   beanFactory =new ClassPathXmlApplicationContext("spring.xml");		
	}	
	/**
	 * 获取Bean对象
	 * @param pBeanID
	 * @return
	 */
	public static Object getBean(String pBeanID) {
		return beanFactory.getBean(pBeanID);
	}
	

    后来改用spring提供的ContextLoaderListener这一监听器,在WEB应用启动时初始化spring容器,具体在web.xml里配置如下:

	<!-- 应用的Spring配置的加载 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/conf/spring.xml
  		</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

     这个版本存在一个问题,我们项目中未在spring容器注册的类如果想调用容器中的bean实例,需要servletContext这一参数信息。

     具体获取方法有两种:

ApplicationContext context= WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);

 

ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);

   两者的区别是:第一种方法失败会抛异常,第二种返回null不做处理。

   如果是没有servletContext的场景,难道又得回到最初的方法,维护个静态容器工厂!!

   当然是有更好的方案,一样还是通过web.xml的监听器实现,在应用启动时初始化加载容器,并把它保存到静态变量中,具体代码和配置如下:

web.xml:

	<!-- 保存spring容器,为spring容器外的类提供容器获取接口 -->
	<listener>
		<listener-class>com.rb.obs.face.common.util.SpringContextListener</listener-class>
	</listener>

 监听器实现:

package com.rb.obs.face.common.util;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;


public class SpringContextListener implements ServletContextListener {
	private static WebApplicationContext context;

	public SpringContextListener() {
		super();
	}

	public void contextInitialized(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		context = WebApplicationContextUtils.getWebApplicationContext(sce
				.getServletContext());
	}

	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
	}

	public static ApplicationContext getApplicationContext() {
		return context;
	}

}

 获取容器:

ApplicationContext context = SpringContextListener.getApplicationContext()

 

    

分享到:
评论

相关推荐

    详解spring boot容器加载完后执行特定操作

    "Spring Boot 容器加载完成后执行特定操作" Spring Boot 框架提供了多种方式来执行容器加载完成后的特定操作,例如使用 ApplicationListener 接口或使用 @PostConstruct 注解。在本文中,我们将介绍使用 ...

    Spring简单模拟Spring容器

    6. 添加获取Bean实例的方法,模拟Spring容器的getBean功能。 在标签中提到了“源码”和“工具”,这意味着博客可能会深入到Spring框架的源码层面,分析其内部实现机制,同时也可能介绍了一些辅助开发的工具,比如...

    Spring动态加载配置文件

    总的来说,Spring动态加载配置文件的实现涉及到文件监听、配置文件解析、应用上下文刷新以及Web容器的协同。通过这样的机制,开发者可以在开发阶段快速响应配置的更改,提高开发效率,同时降低生产环境因重启服务...

    简单Spring容器实现

    本主题将深入探讨“简单Spring容器实现”,基于提供的标签“源码”和“工具”,我们将聚焦于Spring容器的原理及其简易实现。下面,我们先来理解Spring容器的核心概念,然后逐步探索其内部机制,并通过一个名为...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...

    JDK8 下 SpringBoot 应用动态编译 Java 源码并注入 Spring 容器

    基于接口、抽象类实现不停机动态调整代码的目的,将修改后的源码文件放置于指定目录下,读取文件后执行动态编译方法,即可将该类重新加载,新的类可以在Spring容器从新注册,且仅在当前窗口生效。如果重启了服务或...

    深度解析spring容器管理bean

    Spring容器还提供了多种管理Bean生命周期的方法,包括初始化回调、销毁回调、以及作用域(singleton、prototype等)。初始化回调是指在Bean实例化后、开始使用前执行的方法,可以通过`init-method`属性指定。销毁回...

    Spring容器 .ppt

    Spring容器是Spring框架的核心组成部分,它负责管理对象的生命周期和对象之间的依赖关系。Spring容器的主要职责是读取配置元数据,创建和组装Bean,并提供Bean的完整生命周期管理。本篇内容将深入探讨Spring容器的...

    Spring IoC加载流程讲解

    然后,我们调用父类 AbstractApplicationContext 的 refresh() 方法,该方法采用模板方法的设计模式将加载 IoC 容器的流程列于其中。具体调用到的方法由其子类进行覆盖。 3. 加载 BeanFactory 在 ...

    spring容器简单实例

    本实例将带你深入理解Spring容器的基本使用,通过实际操作来帮助你快速上手。 1. **Spring容器概述** Spring容器是Spring框架的核心,负责管理对象的生命周期和依赖关系。主要有两种类型的容器:BeanFactory和...

    Spring Boot容器加载时执行特定操作(推荐)

    Spring Boot 容器加载时执行特定操作 Spring Boot 框架提供了多种方式来执行容器加载时的特定操作。其中一种方式是通过实现 ApplicationListener 接口,并指定相应的事件来执行操作。 ApplicationListener 接口是 ...

    springBean加载过程源码解析文档,附有代码类名和行数

    Spring Bean 加载过程源码解析文档 Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责...

    Spring 容器后处理器

    该接口只有一个方法`postProcessBeanFactory`,该方法在容器加载完成之后被调用,可以用来改变容器中的配置或做一些初始化工作。 ```java public interface BeanFactoryPostProcessor { void ...

    spring加载

    3. **IoC(控制反转)与DI(依赖注入)**:在Spring中,bean的创建和初始化由Spring容器控制,这就是所谓的控制反转。依赖注入则是通过容器将bean所需的服务或对象传递给它,而不是由bean自己去查找。这大大提高了...

    spring加载顺序讨论

    首先,Spring容器在启动时会读取配置文件(如XML或Java配置类),根据配置信息创建Bean的定义。Bean的定义包含了Bean的类、属性、依赖关系等信息。 ### Bean的实例化 1. **构造器注入**:当Spring创建Bean时,如果...

    SpringBoot如何在普通类加载Spring容器

    SpringBoot如何在普通类加载Spring容器 SpringBoot作为一个流行的Java框架,提供了很多便捷的方式来加载和管理Bean。然而,在某些情况下,我们可能需要在普通类中使用Spring容器中的Bean。在本文中,我们将介绍如何...

    详解Spring简单容器中的Bean基本加载过程

    Spring 简单容器中的 Bean 基本加载过程 Spring 框架是 Java 企业级应用程序的核心框架之一,它提供了一个 IOC(Inverse of Control,控制反转)容器,用于管理应用程序中的对象。Spring IOC 容器的核心是 ...

    struts加载spring的方法

    ### Struts加载Spring的方法 在Java Web开发领域中,Struts与Spring是两个非常重要的框架。Struts主要用于构建MVC架构的应用程序,而Spring则是一个轻量级的控制反转(Inversion of Control, IoC)容器,同时也提供...

    SpringSecurity加载流程图.vsdx

    SpringSecurity加载流程图 SpringSecurity系统启动流程 SpringSecurity调用流程

Global site tag (gtag.js) - Google Analytics