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>
分享到:
相关推荐
在实现方法中,我们首先需要创建一个SpringBeanUtil类,这个类实现了ApplicationContextAware接口。然后,我们可以使用这个类来获取spring容器中的对象。例如,我们可以使用getBeanByClass方法来根据类类型来获取...
1. **理解ApplicationContextAware接口**:当一个Bean实现了ApplicationContextAware接口,Spring容器会在Bean初始化后,自动将ApplicationContext对象注入到Bean中,使得Bean可以获取到上下文中的其他Bean。...
### 知识点二:实现ApplicationContextAware接口 从提供的代码中可以看出,`Person`类实现了`ApplicationContextAware`接口。在其`setApplicationContext`方法中,将传入的`ApplicationContext`参数赋值给类的成员...
3. **实现ApplicationContextAware**:为了在`Timer`中使用Spring管理的Bean,我们需要实现`ApplicationContextAware`接口,以便获取Spring上下文。 ```java @Component public class TimerConfig implements ...
4. **ApplicationContextAware**:让线程处理类实现`ApplicationContextAware`接口,Spring会在启动时自动为其注入`ApplicationContext`。然后,可以通过`ApplicationContext`的`getBean()`方法来获取所需的bean。...
然而,对于后三种方式(继承抽象类或实现接口),请注意这些类必须在Spring配置文件中声明,否则`ApplicationContext`将无法正确注入,导致`null`引用。在实际开发中,选择合适的方法取决于具体的应用场景和需求。
在Spring框架中,`@Autowired` 注解和 `ApplicationContextAware` 接口都可以用来注入 `ApplicationContext` 对象,但它们的实现方式和使用场景略有不同。`@Autowired` 是Spring提供的依赖注入机制,主要用于自动...
一种常见的做法是创建一个工具类,如`SpringUtil`,该类实现`ApplicationContextAware`接口。这个接口是Spring提供的,它的`setApplicationContext`方法会在Spring初始化时自动调用,传入当前的ApplicationContext。...
首先,在`spring-context.xml`中添加一个名为`ApplicationContextUtil`的Bean,该Bean用于实现`ApplicationContextAware`接口,以便Spring容器能够自动注入`ApplicationContext`。 ```xml ``` ##### 2. 实现`...
事件发布者可以是任何实现了`ApplicationContextAware`或`ApplicationEventPublisherAware`接口的类。例如,下面展示了一个实现`ApplicationContextAware`的示例: ```java public class UserBiz implements ...
在获取所有拥有特定注解的Bean实例代码时,需要注意的是,ApplicationContextAware接口不能用来获取所有Bean的实例,因为setApplicationContext方法不是在所有Bean初始化完成后实现的。 Spring启动后获取所有拥有...
④ 如果 Bean 实现 BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext ⑤ 如果存在类实现 BeanPostProcessor(后处理 Bean),执行 ...
- 创建Action类:Action类需要实现Spring的ApplicationContextAware接口,以便获取Spring的ApplicationContext,并通过它来获取依赖的服务。 - 结合使用:在Action中通过@Autowired注解或者ApplicationContext获取...
首先,我们需要定义一个类来获取 Spring 的上下文,该类需要实现 ApplicationContextAware 接口,以便获取应用程序的上下文: ```java @Component public class ApplicationContextProvider implements ...
下面是一个示例代码,演示如何实现ApplicationContextAware接口来获取ApplicationContext: ```java @Component public class SpringContextUtil implements ApplicationContextAware { private static Logger ...
方法五:实现接口 ApplicationContextAware 实现该接口的 setApplicationContext(ApplicationContext context) 方法,并保存 ApplicationContext 对象。Spring 初始化时,会通过该方法将 ApplicationContext 对象...
在非Spring Boot项目中,可以通过Spring的`ApplicationContextAware`接口获取ApplicationContext,然后手动启动和停止调度器。 通过理解以上知识点,你将能够有效地在Spring项目中利用Spring Trigger创建和管理定时...
在上面的例子中,`DataProviderManagerImpl`实现了`ApplicationContextAware`接口,从而可以在Spring容器中获取到`ApplicationContext`。当我们有一个`DataProvider`对象并想对其进行初始化时,先检查它是否实现了`...
首先,`SimpleServletHandlerAdapter`是`HandlerAdapter`接口的一个实现,该接口是Spring MVC的核心组件之一,用于适配各种类型的处理器(如Controller、Servlet等)。`HandlerAdapter`的主要职责是将HTTP请求映射到...
创建一个工具类`SpringContextUtil`,并实现`ApplicationContextAware`接口,这样Spring会在初始化时自动调用`setApplicationContext`方法,将ApplicationContext注入到静态变量中: ```java public class ...