接上一篇,如果没有Servlet代理类,而又想在Servlet(或其他非同一Spring容器管理的对象)中获取目标bean,可以实现接口org.springframework.context.ApplicationContextAware,然后将实现类作为bean,然后可以正常使用,一般是将常用的getBean、getBeansOfType等包装成类方法,一是方便作为工具方法调用,二来可以自己捕获异常,再抛出项目中的指定异常。实际上,ApplicationContextAware的类型层次结构中,有一个实现类org.springframework.context.support.ApplicationObjectSupport,并整合了MessageSourceAccessor很方便。代码如下:
package com.xxx.context;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ApplicationObjectSupport;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.util.Assert;
import xxx.xxx.BusinessException;
/**
* Spring上下文<br>
**/
public class SpringContext extends ApplicationObjectSupport implements InitializingBean {
/** 当前上下文 */
private static ApplicationContext context = null;
/** 消息存取器 */
private static MessageSourceAccessor messageSourceAccessor = null;
@Override
public void afterPropertiesSet() throws Exception {
context = super.getApplicationContext();
messageSourceAccessor = new MessageSourceAccessor(context);
Assert.notNull(context, "ApplicationContext不能为空!");
Assert.notNull(messageSourceAccessor, "messageSourceAccessor不能为空!");
}
/**
* 根据名称获取Bean
*
* @param beanName
* @return
*/
public static Object getBean(String beanName) throws BusinessException {
try {
return context.getBean(beanName);
}
catch (Exception e) {
throw new BusinessException("", e);
}
}
/**
* 根据类型获取Bean Map
*
* @param type
* @return
*/
public static <T> Map<String, T> getBeanMapOfType(Class<T> type) throws BusinessException {
try {
return context.getBeansOfType(type);
}
catch (Exception e) {
throw new BusinessException("", e);
}
}
/**
* 根据类型获取Bean List
*
* @param type
* @return
*/
public static <T> List<T> getBeanListOfType(Class<T> type) throws BusinessException {
Map<String, T> beanMap = getBeanMapOfType(type);
List<T> list = new ArrayList<T>();
if (MapUtils.isNotEmpty(beanMap)) {
list.addAll(beanMap.values());
}
return list;
}
/**
* 根据类型获取Bean Array
*
* @param type
* @return
*/
public static <T> T[] getBeanArrayOfType(Class<T> type) throws BusinessException {
List<T> list = getBeanListOfType(type);
@SuppressWarnings("unchecked")
T[] array = (T[]) Array.newInstance(type, list.size());
array = list.toArray(array);
return array;
}
/**
* 获取国际化消息
*
* @param code
* 消息代码
* @return
*/
public static String getMessage(String code) throws BusinessException {
try {
return messageSourceAccessor.getMessage(code);
}
catch (Exception e) {
throw new BusinessException("", e);
}
}
}
相关推荐
本篇文章将深入探讨如何利用Spring Context上下文来创建自定义对象,并理解控制反转的原理。 首先,让我们了解什么是Spring Context。Spring Context是Spring框架的应用上下文,它充当了全局容器,存储了应用的所有...
通过Spring上下文获取bean的实例对象
本章将深入探讨Spring应用上下文的生命周期,从启动准备阶段到关闭阶段,包括各个关键步骤和相关组件的作用。 1. **Spring 应用上下文启动准备阶段** 在这个阶段,AbstractApplicationContext的`prepareRefresh()`...
* 介绍如何获取并使用Bean对象,包括获取Spring上下文对象、获取指定Bean对象、使用Bean对象 第2篇 Spring使用注解存储和读取对象 * 介绍Spring中使用注解存储和读取对象的方法 * 演示如何使用@Spring注解来创建...
以上两种方式都可以从 `ServletContext` 中获取到 Spring 上下文对象。 #### 9. Spring AOP 的底层使用的是什么技术? - **知识点**: Spring AOP 主要使用 JDK 动态代理和 CGLIB 两种技术实现。 - **解释**: JDK ...
2. **Spring上下文对象的获得和使用** Spring的ApplicationContext是应用上下文的核心,它包含了所有bean的定义和配置。在Spring MVC中,我们可以通过`@Autowired`注解自动注入`ApplicationContext`,以便获取其他...
在Java开发中,特别是在基于Spring Boot的项目中,自定义上下文对象可以帮助开发者更方便地访问和管理应用中的各种资源。Jeesite框架是基于Spring MVC的一个企业级快速开发平台,它提供了丰富的功能模块和灵活的扩展...
向Spring 框架提供上下文信息,包括企业服务,如 JNDI、EJB、电子邮件、国际化、校验和调度等。 Spring AOP。通过配置管理特性,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块直接将面向方面...
在Spring-Context中,你可以理解为Spring上下文就是应用程序的运行环境,它负责管理和装配Bean,同时提供了事件发布、国际化等功能。让我们深入探讨一下Spring上下文的相关知识点。 1. **Bean的定义与管理** - **...
在Spring中,ApplicationContext(应用程序上下文)是容器的核心,负责配置和管理应用中对象的生命周期和依赖关系。在实际开发过程中,经常需要从各个角落获取到这个ApplicationContext对象,以便于能够使用Spring...
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 Spring AOP:通过配置管理特性,Spring AOP 模块...
Spring 应用上下文获取 Bean 是一个常见的操作,在 Spring 框架中获取 Bean 对象是非常重要的。本文将总结 Spring 应用上下文获取 Bean 的常用姿势实例,并对其实现方法和操作注意事项进行详细的分析和讲解。 一、...
在IT行业中,Spring框架与FreeMarker模板引擎的整合是一个常见的任务,特别是在开发Web应用程序时。Spring MVC作为Spring框架的一部分,负责处理HTTP请求并提供视图层的解决方案,而FreeMarker则是一个强大的、轻量...
Spring 上下文是 Spring 框架的核心组件,它是一个容器,负责管理应用对象的生命周期和依赖关系。通过 Spring 上下文,我们可以声明 Bean、配置 Bean 的属性、定义 Bean 之间的依赖关系,以及在需要时获取这些 Bean ...
2. **Filter**: 同样,可以在Filter的init()方法中获取ApplicationContext,或者通过ServletContextAware接口,将Spring上下文注册到ServletContext,然后在doFilter()方法中使用。 3. **Listener**: 在监听器的...
标题中的“上下文应用”可能指的是在软件开发中,尤其是Java或Spring框架中常见的“上下文(Context)”概念。上下文通常是指程序运行时的状态或环境,它可以包含对象、配置信息以及其他必要的数据,使得不同的组件...
Spring框架提供了一个监听器ContextLoaderListener,就是对上述功能的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中。同时,Spring还提供了一个客户端工具...
它支持JUnit和TestNG,允许在测试环境中轻松地配置Spring上下文。 `spring-orm-4.3.10.RELEASE.jar`是Spring与各种ORM(Object-Relational Mapping)框架的集成模块,如Hibernate、JPA等。它提供了数据访问抽象层,...
1. `org.springframework.context-3.0.2.RELEASE.jar`:这个库提供了上下文支持,包括应用上下文(ApplicationContext)和扩展上下文(ExtendedContext)。ApplicationContext 是 Spring 中的核心接口,它负责管理 ...
- `spring-context`:扩展了`spring-beans`,提供了上下文支持,如事件发布、国际化和资源访问等功能。 - `spring-aop`:实现了AOP框架,支持切点表达式、通知类型和代理模式。 - `spring-web`:提供了Web相关的支持...