`

实现ApplicationContextAware接口注意问题

 
阅读更多
package com.holpe.tool;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringContextUtil implements ApplicationContextAware {
	private static ApplicationContext applicationContext; // Spring应用上下文环境

	/**
	 * 实现ApplicationContextAware接口的回调方法,设置上下文环境
	 * 
	 * @param applicationContext
	 * @throws BeansException
	 */
	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		SpringContextUtil.applicationContext = applicationContext;
	}

	/**
	 * @return ApplicationContext
	 */
	public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	/**
	 * 获取对象
	 * 
	 * @param name
	 * @return Object 一个以所给名字注册的bean的实例
	 * @throws BeansException
	 */
	public static Object getBean(String name) throws BeansException {
		return applicationContext.getBean(name);
	}

	/**
	 * 获取类型为requiredType的对象
	 * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
	 * 
	 * @param name
	 *            bean注册名
	 * @param requiredType
	 *            返回对象类型
	 * @return Object 返回requiredType类型对象
	 * @throws BeansException
	 */
	public static Object getBean(String name, Class requiredType)
			throws BeansException {
		return applicationContext.getBean(name, requiredType);
	}

	/**
	 * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
	 * 
	 * @param name
	 * @return boolean
	 */
	public static boolean containsBean(String name) {
		return applicationContext.containsBean(name);
	}

	/**
	 * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
	 * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
	 * 
	 * @param name
	 * @return boolean
	 * @throws NoSuchBeanDefinitionException
	 */
	public static boolean isSingleton(String name)
			throws NoSuchBeanDefinitionException {
		return applicationContext.isSingleton(name);
	}

	/**
	 * @param name
	 * @return Class 注册对象的类型
	 * @throws NoSuchBeanDefinitionException
	 */
	public static Class getType(String name)
			throws NoSuchBeanDefinitionException {
		return applicationContext.getType(name);
	}

	/**
	 * 如果给定的bean名字在bean定义中有别名,则返回这些别名
	 * 
	 * @param name
	 * @return
	 * @throws NoSuchBeanDefinitionException
	 */
	public static String[] getAliases(String name)
			throws NoSuchBeanDefinitionException {
		return applicationContext.getAliases(name);
	}

}

注意:如果不在applicationContext.xml中配置该实现类的话,applicationContext一直没有被初始化
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
     <import resource="bean.xml"/>
[color=red] <bean class="com.holpe.tool.SpringContextUtil" />[/color]
</beans>

分享到:
评论

相关推荐

    普通对象使用spring容器中的对象的实现方法

    在实现方法中,我们首先需要创建一个SpringBeanUtil类,这个类实现了ApplicationContextAware接口。然后,我们可以使用这个类来获取spring容器中的对象。例如,我们可以使用getBeanByClass方法来根据类类型来获取...

    spring监听器共20页.pdf.zip

    1. **理解ApplicationContextAware接口**:当一个Bean实现了ApplicationContextAware接口,Spring容器会在Bean初始化后,自动将ApplicationContext对象注入到Bean中,使得Bean可以获取到上下文中的其他Bean。...

    Spring实战之让Bean获取Spring容器操作示例

    ### 知识点二:实现ApplicationContextAware接口 从提供的代码中可以看出,`Person`类实现了`ApplicationContextAware`接口。在其`setApplicationContext`方法中,将传入的`ApplicationContext`参数赋值给类的成员...

    Spring使用timer定时器-能精确几点运行定时任务

    3. **实现ApplicationContextAware**:为了在`Timer`中使用Spring管理的Bean,我们需要实现`ApplicationContextAware`接口,以便获取Spring上下文。 ```java @Component public class TimerConfig implements ...

    线程中获取spring 注解bean

    4. **ApplicationContextAware**:让线程处理类实现`ApplicationContextAware`接口,Spring会在启动时自动为其注入`ApplicationContext`。然后,可以通过`ApplicationContext`的`getBean()`方法来获取所需的bean。...

    Java类获取Spring中bean的5种方式

    然而,对于后三种方式(继承抽象类或实现接口),请注意这些类必须在Spring配置文件中声明,否则`ApplicationContext`将无法正确注入,导致`null`引用。在实际开发中,选择合适的方法取决于具体的应用场景和需求。

    spring源码系列(五)——番外篇回答网友的问题

    在Spring框架中,`@Autowired` 注解和 `ApplicationContextAware` 接口都可以用来注入 `ApplicationContext` 对象,但它们的实现方式和使用场景略有不同。`@Autowired` 是Spring提供的依赖注入机制,主要用于自动...

    Web项目中获取SpringBean与在非Spring组件中获取SpringBean.pdf

    一种常见的做法是创建一个工具类,如`SpringUtil`,该类实现`ApplicationContextAware`接口。这个接口是Spring提供的,它的`setApplicationContext`方法会在Spring初始化时自动调用,传入当前的ApplicationContext。...

    获取Spring容器

    首先,在`spring-context.xml`中添加一个名为`ApplicationContextUtil`的Bean,该Bean用于实现`ApplicationContextAware`接口,以便Spring容器能够自动注入`ApplicationContext`。 ```xml ``` ##### 2. 实现`...

    Spring中ApplicationContext对事件传递

    事件发布者可以是任何实现了`ApplicationContextAware`或`ApplicationEventPublisherAware`接口的类。例如,下面展示了一个实现`ApplicationContextAware`的示例: ```java public class UserBiz implements ...

    Spring启动后获取所有拥有特定注解的Bean实例代码

    在获取所有拥有特定注解的Bean实例代码时,需要注意的是,ApplicationContextAware接口不能用来获取所有Bean的实例,因为setApplicationContext方法不是在所有Bean初始化完成后实现的。 Spring启动后获取所有拥有...

    架构师面试题系列之Spring面试专题及答案(41题).docx

    ④ 如果 Bean 实现 BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext ⑤ 如果存在类实现 BeanPostProcessor(后处理 Bean),执行 ...

    Struts2和Spring整合

    - 创建Action类:Action类需要实现Spring的ApplicationContextAware接口,以便获取Spring的ApplicationContext,并通过它来获取依赖的服务。 - 结合使用:在Action中通过@Autowired注解或者ApplicationContext获取...

    详解Spring-Boot中如何使用多线程处理任务

    首先,我们需要定义一个类来获取 Spring 的上下文,该类需要实现 ApplicationContextAware 接口,以便获取应用程序的上下文: ```java @Component public class ApplicationContextProvider implements ...

    Spring通过ApplicationContext主动获取bean的方法讲解

    下面是一个示例代码,演示如何实现ApplicationContextAware接口来获取ApplicationContext: ```java @Component public class SpringContextUtil implements ApplicationContextAware { private static Logger ...

    Spring获取webapplicationcontext,applicationcontext几种方法详解

    方法五:实现接口 ApplicationContextAware 实现该接口的 setApplicationContext(ApplicationContext context) 方法,并保存 ApplicationContext 对象。Spring 初始化时,会通过该方法将 ApplicationContext 对象...

    springTrigger 触发器

    在非Spring Boot项目中,可以通过Spring的`ApplicationContextAware`接口获取ApplicationContext,然后手动启动和停止调度器。 通过理解以上知识点,你将能够有效地在Spring项目中利用Spring Trigger创建和管理定时...

    spring强行注入和引用实例解析

    在上面的例子中,`DataProviderManagerImpl`实现了`ApplicationContextAware`接口,从而可以在Spring容器中获取到`ApplicationContext`。当我们有一个`DataProvider`对象并想对其进行初始化时,先检查它是否实现了`...

    spring管理servlet的利器--SimpleServletHandlerAdapter

    首先,`SimpleServletHandlerAdapter`是`HandlerAdapter`接口的一个实现,该接口是Spring MVC的核心组件之一,用于适配各种类型的处理器(如Controller、Servlet等)。`HandlerAdapter`的主要职责是将HTTP请求映射到...

    Spring在代码中获取bean的方法小结

    创建一个工具类`SpringContextUtil`,并实现`ApplicationContextAware`接口,这样Spring会在初始化时自动调用`setApplicationContext`方法,将ApplicationContext注入到静态变量中: ```java public class ...

Global site tag (gtag.js) - Google Analytics