`
Everyday都不同
  • 浏览: 723699 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

在web项目中获取ApplicationContext上下文的3种主要方式及适用情况

阅读更多

最近在做web项目,需要写一些工具方法,涉及到通过Java代码来获取spring中配置的bean,并对该bean进行操作的情形。而最关键的一步就是获取ApplicationContext,过程中纠结和错误了很久,总结一下获取ApplicationContext的三种方式:

 

方式一:实现ApplicationContextAware接口

对于实现ApplicationContextAware接口的类,spring容器在初始化的时候会扫描他,并把容器的context环境注入给它。如下:

public class BeanUtil implements ApplicationContextAware
{
         private  ApplicationContext context;
	 
	 @Override
		public void setApplicationContext(ApplicationContext ctx)
				throws BeansException {
		 	System.out.println("进入这个set方法...");
		 	System.out.println("容器本身:" + (ctx==null));
			this.context = ctx;
}

 但同时,必须在spring的配置文件中注入该类:

<bean id="sys" class="org.test.util.BeanUtil"/>

 注:虽说通过这种方式可以得到spring上下文,但必须考虑到:调用该工具类的Java类也必须注册成bean,并指定一个BeanUtil类型的属性引用sys bean,而不能通过代码的方式去获取这个工具类. 这样就违背了工具类的初衷,因为我们为了使用工具类而去把一个可能并不需要注册成bean的普通java类也注册成一个bean,这显然是多此一举的。

 

方式二:WebApplicationContext wc = ContextLoader.getCurrentWebApplicationContext();

注:我使用这种方式去获取上下文,但一直是null,后来查阅相关API才发现,使用该种方式的Java类必须是一个servlet或者action.普通类是无法直接使用的——或者是在web容器已经开启的情况下可以通过该方法获得上下文,假设此时再通过Resources方式new,得到的上下文将不会是此时容器中的上下文,因而也无法对容器中的bean进行管理了。也就是说,你随便写一个类,在它的main方法中透过调用这个方法,是无法获取到这个类所在项目的spring上下文的!

 

方式三:Resource方式

即:

public class SysBeans implements 
{
	 private static ApplicationContext context;
	 public static ApplicationContext getContext() {
		 context = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/conf/applicationContext-base.xml");
//		 context = new FileSystemXmlApplicationContext("","");
		 return context;
	 }
}

 注:new ClassPathXmlApplicationContext (..)的方式只能获取位于类路径下的配置,而new FileSystemXmlApplicationContext(..)则可以获取到WEB-INF下的配置。通过filesystem的方式时,建议写相对路径,即从webRoot/WEN-INF/...xml开始写。当这两种resource方式需要同时加载多个配置时,参数可以用逗号(,)隔开,或者传入一个string[]类型的路径数组。

分享到:
评论

相关推荐

    ApplicationContext及它的3种实现.docx

    在Spring中,有三种主要的`ApplicationContext`实现: - **ClassPathXmlApplicationContext**:此实现从类路径中加载XML配置文件。例如,`new ClassPathXmlApplicationContext("bean.xml")`会查找类路径下的"bean....

    Spring + struts 整合的三种主要方式

    在上面的示例中,我们通过`getWebApplicationContext()`方法获取到了Spring的上下文,然后从中取出所需的Bean(在这个例子中是`LoginDao`)。这种方式的好处在于可以非常方便地利用Spring的依赖注入功能,同时保留...

    线程中获取spring 注解bean

    在提交任务时,可以将bean作为参数传递,或者在任务内部使用`ApplicationContextAware`接口获取应用上下文,从而获取bean。 4. **ApplicationContextAware**:让线程处理类实现`ApplicationContextAware`接口,...

    Web服务启动时自动加载Servlet,并读取数据库内容

    在上述代码中,`getRequiredWebApplicationContext(sc)`用于从Servlet上下文中获取Spring的应用上下文。`ac.getBean("mobileService")`则根据bean的ID(在Spring配置文件中定义)获取`MobileService`的实例。`dic()`...

    三种整合 Struts 应用程序与 Spring 的方式

    Struts 与 Spring 的整合是Java Web开发中常见的需求,因为这两个框架分别在MVC模式和依赖注入(DI)及面向切面编程(AOP)方面提供了强大的功能。本文主要介绍了三种整合Struts应用程序与Spring的方法。 首先,Spring...

    Spring在web.xml中的配置详细介绍

    首先,要理解Spring在web应用中主要通过两种方式提供上下文(Context)加载器:一种是基于Listener接口实现的ContextLoaderListener,另一种是基于Servlet接口实现的ContextLoaderServlet。这两种方式在功能上是相同...

    SSM-Shiro.zip_shiro ssm 整合_ssm web shiro%2_ssm+shiro_ssm590.com_

    在SSM中,Spring主要负责管理Bean和应用上下文。 3. **Spring MVC**: Spring MVC是Spring框架的一部分,用于构建Web应用。它提供了模型-视图-控制器(MVC)架构,帮助开发者处理HTTP请求、展现数据和控制流程。 4....

    spring-aware接口实现与bean作用域(spring多容器层面)

    在Spring框架中,`Spring-Aware`接口是一个重要的概念,它允许我们与Spring的应用上下文(ApplicationContext)进行交互,从而获取或操作由Spring管理的Bean。`ApplicationContextAware`是其中的一个典型接口,当...

    Spring基础面试

    以上两种方式都可以从 `ServletContext` 中获取到 Spring 上下文对象。 #### 9. Spring AOP 的底层使用的是什么技术? - **知识点**: Spring AOP 主要使用 JDK 动态代理和 CGLIB 两种技术实现。 - **解释**: JDK ...

    Spring整合Struts

    因为StrutsTestCase的MockStrutsTestCase不会在启动时初始化监听器,所以将所有上下文文件放置在插件中是一种变通方法。 配置完插件后,就可以让Spring管理你的Action了。Spring1.1.3提供了两种方式: 1. 覆盖...

    2024Spring Boot原理篇HM

    这两种配置方式可以用来覆盖配置文件中的默认设置,尤其适用于生产环境中动态调整配置的情况。 - **命令行参数的优先级高于Java系统属性**,而这两者的优先级又高于配置文件中的设置。 - **示例**:如果设置了`-D...

    SpringBoot最新2021年面试题,高级面试题及附答案解析.md

    `bootstrap`主要用于从额外的资源加载配置信息,如从Spring Cloud Config Server获取配置,或是在本地外部配置文件中解密属性。 - **共享环境**:`bootstrap`和`application`两个上下文共享同一个环境,这意味着所有...

    flex4.5+java+spring+blazeds通信

    2. **Spring配置**:在`JavaWebSpringFlexDemo`项目中手动配置`web.xml`文件,包括Spring的上下文配置和监听器。 3. **SpringFactory配置**:创建一个名为`SpringFactory.java`的文件,该文件通常可以从Spring官网...

    c3p0类包附经典使用案例

    2. **Web应用中使用**:在Servlet应用中,c3p0可以作为JNDI数据源,或者直接在Web应用上下文中配置。 3. **动态调整连接池大小**:根据系统负载动态调整连接池的大小,以应对高峰期和低谷期的流量变化。 总结,c3p0...

    Spring系列面试题129道(附答案解析)

    Spring的内部bean是指在另一个bean的属性中定义的bean,它仅在包含它的外部bean的上下文中存在。 22、什么是spring装配。 Spring装配是指将对象组装到一起,并设置它们之间的依赖关系的过程。 23、自动装配有哪些...

    Spring中文教程+案例

    3. **创建上下文**:通过`ApplicationContext`接口的实现类(如`ClassPathXmlApplicationContext`)加载配置文件,创建Spring容器。 #### Spring基础语义 ##### Dependency Injection (DI) 依赖注入是Spring框架...

    Java+maven+spring MVC+Spring+Hibernate整合

    3. **配置Spring**:创建Spring的上下文配置文件(如applicationContext.xml),配置bean,包括数据源、SessionFactory、事务管理器等。 4. **配置Spring MVC**:创建Spring MVC的配置文件(如servlet-context.xml)...

    Spring面试专题1

    ApplicationContext接口进一步扩展了BeanFactory,增加了国际化、事件处理、Web应用上下文等功能。IoC容器通过XML、注解或Java配置等方式定义bean及其依赖关系,实现了对象的创建、初始化和销毁的自动化管理。 5. ...

    Spring5.0.4官方文档-离线pdf版本

    Bean工厂负责对象的创建、配置和管理,而ApplicationContext则提供了一个更高级的上下文,增加了对国际化、事件传播以及AOP(面向切面编程)的支持。 AOP是Spring的重要特性,允许开发者定义“切面”,将关注点分离...

Global site tag (gtag.js) - Google Analytics