对于Spring应用程序上下文的引用基本有两种形式,一种就是通过实现Spring提供的Aware接口来得到Spring容器的应用程序上下文,第二种就是使用
ContextSingletonBeanFactoryLocator来获得Spring应用程序上下文。
第一种情况就不用多说了,这里主要介绍第二种得到Spring应用程序上下文的方法。
在有些应用场景中,没有办法通过使用Spring的Aware接口将其上下文注入到需要使用Spring上下文的类中。这种情况一般发生在某个应用程序需要运行在特定容器中的情况,比如Web容器或者EJB容器。对于Web容器来说,Spring与现有的大多数流行MVC容器集成都很好,但是对于EJB容器就没有办法将Spring应用程序上下文的引用传递给新创建的EJB。也就是说Spring与现有的EJB容器的集成不是太好。
当然,可以让每个新创建的EJB都拥有一份Spring应用程序上下文的拷贝,但是这种方式在有的时候会引起性能上的很大消耗。比如Spring应用程序上下文包含相当多的Bean定义,或者包含初始化代价很高的Bean(Hibernate Session)。所以Spring提供了另外一种机制也就是共享上下文机制。
通过Spring提供的
ContextSingletonBeanFactoryLocator或者
SingletonBeanFactoryLocator来获得Spring应用程序上下文。这种方式下,Spring会缓存一个应用程序上下文的单例来提供给不同的调用者。
使用这种方式需要增加一个Spring的配置文件,该文件的默认名字为beanRefContext.xml,内容大致如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<bean id="servicelayer-context"
class="org.springframework.context.support.
ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>/servicelayer-applicationContext.xml</value>
</list>
</constructor-arg>
</bean>
</beans>
有了这个文件就可以使用下面的代码来获得Spring应用程序上下文的引用:
BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance();
BeanFactoryReference bfr = locator.useBeanFactory("serviceLayer-context");
//通过factory的getBean方法获得想要的bean....
BeanFactory factory = bfr.getFactory();
bfr.release();
上面代码段的第一行代码就会读取默认的beanRefContext.xml配置文件(位于Classpath的根目录下),第二行代码指定了使用该配置文件中的那个Bean作为BeanFacotry,第三行代码则是用来获得真正的BeanFactory。
当然,用户也可以指定beanRefContext.xml为别的位置上的别的文件,通过ContextSingletonBeanFactoryLocator.getInstance(String)可以实现,具体请参考Spring的Java Doc。另外在beanRefContext.xml可以定义多个不同的ApplicationContext实现类,并且可以指定ApplicationContext实现类加载的配置文件的数量和路径。
如果在别的容器中需要使用Spring的应用程序上下文,但是又没有办法用其他方式来获得其上下文的时候可以采用这种方式。另外一个用处就是可以通过这种方式定义共享的Spring应用程序上下文。例如在一个J2EE EAR中可能有几个WAR,每个WAR中使用的底层Service都一样,那就可以用Spring来管理Service之间依赖和初始化工作,然后通过上述方式共享Spring应用程序上下文。
这种方式还可以实现用Spring来维护一个或者多有由不同Bean构成的组件,通过上面的方式来使用其中的组件。
分享到:
相关推荐
五、Spring MVC双亲上下文的说明:在Spring MVC中,可以通过双亲上下文机制来共享Spring IoC容器中的Bean。这样,Spring MVC和Spring的应用程序上下文可以共享配置信息。 六、Spring MVC mvc.xml配置文件片段讲解:...
Spring Cloud应用程序使用“引导”上下文启动,它是主应用程序的父上下文,负责加载外部配置属性并解密属性。Bootstrap属性优先级高于常规应用属性,它们使用不同的配置文件约定,如`bootstrap.yml`和`application....
1. **Spring集成Quartz**:Spring通过`org.springframework.scheduling.quartz`包提供了与Quartz的集成,可以方便地在Spring应用上下文中配置Job、Trigger以及Scheduler。这包括使用`SchedulerFactoryBean`来启动和...
该文档提供了Spring Cloud Dalston.SR5版本的详细参考,内容覆盖了Spring Cloud的特性、上下文服务、配置、服务注册与发现、配置服务器和客户端、安全性、密钥管理和环境资源配置等方面。 知识点如下: 1. 云原生...
3. **配置BlazeDS**:在Spring应用上下文中配置BlazeDS,设置AMF通道,以允许Flex客户端通过AMF与Spring应用进行通信。 4. **Flex客户端开发**:在Flex项目中,使用`RemoteObject`或`WebService`组件来调用后端的...
在Spring Cloud应用中,有一个引导上下文和主应用上下文,它们共同构成了应用程序的上下文层次结构。引导上下文优先级高于主应用上下文,因此通常用于加载外部配置属性,主应用上下文则主要负责业务逻辑的处理。这种...
5. **ActionContext集成**:WebWork的ActionContext可以与Spring的ApplicationContext交互,共享上下文信息,提供更丰富的环境支持。 6. **国际化和本地化**:Spring和WebWork都支持国际化和本地化,它们可以协同...
- **持久化上下文传播**:改进了持久化上下文的管理机制,提高了事务处理的一致性。 - **Portlet 2.0资源请求支持**:增加了对Portlet 2.0资源请求的支持,提升了portlet环境下的功能。 - **重定向同一状态**:允许...
总的来说,Spring 和 WebWork 的集成是通过共享同一个上下文和依赖注入机制来实现的,这使得开发者能够充分利用 Spring 的优势,同时保留 WebWork 的动态控制流程和用户友好的错误处理。这种集成方式在过去的 Java ...
2. **SpringCloudContext**: 这里介绍了Spring Cloud上下文相关的组件。 - **ApplicationContextServices**,包括: - **TheBootstrapApplicationContext**:初始化引导应用上下文,加载配置文件。 - **...
在Java开发中,特别是在基于Spring Boot的项目中,自定义上下文对象可以帮助开发者更方便地访问和管理应用中的各种资源。Jeesite框架是基于Spring MVC的一个企业级快速开发平台,它提供了丰富的功能模块和灵活的扩展...
`ApplicationContext`接口则进一步封装了应用上下文的功能,如事件发布和资源访问。 在Spring的源码中,我们还可以看到如何通过`BeanPostProcessor`接口实现Bean的后处理器,用于在Bean初始化前后执行自定义操作,...
在提交任务时,可以将bean作为参数传递,或者在任务内部使用`ApplicationContextAware`接口获取应用上下文,从而获取bean。 4. **ApplicationContextAware**:让线程处理类实现`ApplicationContextAware`接口,...
6. **Web应用上下文**:Spring 2.5引入了WebApplicationContext,它是ApplicationContext的子类,专门为Web应用设计。它与Servlet容器紧密集成,提供了一种管理Web应用特定Bean的机制。 7. **国际化**:Spring 2.5...
Java Akka Spring 示例项目是一个整合了Java、Akka框架与Spring框架的应用实例,它展示了如何在Spring上下文中管理和协调Akka系统中的不同角色和调度器。Akka是一个用于构建高度并发、分布式和反应式应用程序的工具...
这些接口允许Bean访问上下文信息或自己的名称。 - **1.6.3 其他Aware接口** Spring还提供了一系列其他Aware接口,可以帮助Bean更好地融入Spring环境。 #### 六、Bean定义继承 通过继承Bean定义,可以复用现有...
在Spring框架中,事件管理是一种强大的机制,它允许在应用程序组件之间传递消息,而无需这些组件之间有直接的依赖关系。这种松耦合的方式提高了代码的可维护性和可测试性。接下来,我们将深入探讨Spring事件管理的...