最近在做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[]类型的路径数组。
相关推荐
在Spring中,有三种主要的`ApplicationContext`实现: - **ClassPathXmlApplicationContext**:此实现从类路径中加载XML配置文件。例如,`new ClassPathXmlApplicationContext("bean.xml")`会查找类路径下的"bean....
在上面的示例中,我们通过`getWebApplicationContext()`方法获取到了Spring的上下文,然后从中取出所需的Bean(在这个例子中是`LoginDao`)。这种方式的好处在于可以非常方便地利用Spring的依赖注入功能,同时保留...
在提交任务时,可以将bean作为参数传递,或者在任务内部使用`ApplicationContextAware`接口获取应用上下文,从而获取bean。 4. **ApplicationContextAware**:让线程处理类实现`ApplicationContextAware`接口,...
在上述代码中,`getRequiredWebApplicationContext(sc)`用于从Servlet上下文中获取Spring的应用上下文。`ac.getBean("mobileService")`则根据bean的ID(在Spring配置文件中定义)获取`MobileService`的实例。`dic()`...
Struts 与 Spring 的整合是Java Web开发中常见的需求,因为这两个框架分别在MVC模式和依赖注入(DI)及面向切面编程(AOP)方面提供了强大的功能。本文主要介绍了三种整合Struts应用程序与Spring的方法。 首先,Spring...
首先,要理解Spring在web应用中主要通过两种方式提供上下文(Context)加载器:一种是基于Listener接口实现的ContextLoaderListener,另一种是基于Servlet接口实现的ContextLoaderServlet。这两种方式在功能上是相同...
在SSM中,Spring主要负责管理Bean和应用上下文。 3. **Spring MVC**: Spring MVC是Spring框架的一部分,用于构建Web应用。它提供了模型-视图-控制器(MVC)架构,帮助开发者处理HTTP请求、展现数据和控制流程。 4....
在Spring框架中,`Spring-Aware`接口是一个重要的概念,它允许我们与Spring的应用上下文(ApplicationContext)进行交互,从而获取或操作由Spring管理的Bean。`ApplicationContextAware`是其中的一个典型接口,当...
以上两种方式都可以从 `ServletContext` 中获取到 Spring 上下文对象。 #### 9. Spring AOP 的底层使用的是什么技术? - **知识点**: Spring AOP 主要使用 JDK 动态代理和 CGLIB 两种技术实现。 - **解释**: JDK ...
因为StrutsTestCase的MockStrutsTestCase不会在启动时初始化监听器,所以将所有上下文文件放置在插件中是一种变通方法。 配置完插件后,就可以让Spring管理你的Action了。Spring1.1.3提供了两种方式: 1. 覆盖...
这两种配置方式可以用来覆盖配置文件中的默认设置,尤其适用于生产环境中动态调整配置的情况。 - **命令行参数的优先级高于Java系统属性**,而这两者的优先级又高于配置文件中的设置。 - **示例**:如果设置了`-D...
`bootstrap`主要用于从额外的资源加载配置信息,如从Spring Cloud Config Server获取配置,或是在本地外部配置文件中解密属性。 - **共享环境**:`bootstrap`和`application`两个上下文共享同一个环境,这意味着所有...
2. **Spring配置**:在`JavaWebSpringFlexDemo`项目中手动配置`web.xml`文件,包括Spring的上下文配置和监听器。 3. **SpringFactory配置**:创建一个名为`SpringFactory.java`的文件,该文件通常可以从Spring官网...
2. **Web应用中使用**:在Servlet应用中,c3p0可以作为JNDI数据源,或者直接在Web应用上下文中配置。 3. **动态调整连接池大小**:根据系统负载动态调整连接池的大小,以应对高峰期和低谷期的流量变化。 总结,c3p0...
Spring的内部bean是指在另一个bean的属性中定义的bean,它仅在包含它的外部bean的上下文中存在。 22、什么是spring装配。 Spring装配是指将对象组装到一起,并设置它们之间的依赖关系的过程。 23、自动装配有哪些...
3. **创建上下文**:通过`ApplicationContext`接口的实现类(如`ClassPathXmlApplicationContext`)加载配置文件,创建Spring容器。 #### Spring基础语义 ##### Dependency Injection (DI) 依赖注入是Spring框架...
3. **配置Spring**:创建Spring的上下文配置文件(如applicationContext.xml),配置bean,包括数据源、SessionFactory、事务管理器等。 4. **配置Spring MVC**:创建Spring MVC的配置文件(如servlet-context.xml)...
ApplicationContext接口进一步扩展了BeanFactory,增加了国际化、事件处理、Web应用上下文等功能。IoC容器通过XML、注解或Java配置等方式定义bean及其依赖关系,实现了对象的创建、初始化和销毁的自动化管理。 5. ...
Bean工厂负责对象的创建、配置和管理,而ApplicationContext则提供了一个更高级的上下文,增加了对国际化、事件传播以及AOP(面向切面编程)的支持。 AOP是Spring的重要特性,允许开发者定义“切面”,将关注点分离...