Spring 之 Applicationcontextaware
Spring 之 ApplicationContextaware
1、简介
实现 ApplicationContextAware
通过它Spring容器会自动把上下文环境对象调用 ApplicationContextAware
接口中的 setApplicationContext
方法。
我们在ApplicationContextAware
的实现类中,就可以通过这个上下文环境对象得到Spring容器中的Bean。ApplicationContextAware的作用是可以方便获取Spring容器ApplicationContext,从而可以获取容器内的Bean。
public interface ApplicationContextAware extends Aware {
void setApplicationContext(ApplicationContext var1) throws BeansException;
}
ApplicationContextAware接口只有一个方法,如果实现了这个方法,那么Spring创建这个实现类的时候就会自动执行这个方法,把ApplicationContext注入到这个类中,也就是说,spring 在启动的时候就需要实例化这个 class(如果是懒加载就是你需要用到的时候实例化),在实例化这个 class 的时候,发现它包含这个 ApplicationContextAware 接口的话,sping 就会调用这个对象的 setApplicationContext 方法,把 applicationContext Set 进去了。
2、配置Spring的XML配置
我们需要在web项目启动的时候就启动Spring容器,所以需要在web.xml中配置Spring监听器:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
会读取默认路径下Bean的application.xml配置文件的,如果需要读取特定路径下的配置文件,需要在web.xml中自定义配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/spring/spring.xml</param-value>
</context-param>
3、创建AppUtil类
创建AppUtil并实现ApplicationContextAware接口:
/**
* @Author dw
* @Description ApplicationContextUtil
* @Date 2024/12/5 10:38
* @Version 1.0
*/
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext context = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return context;
}
/**
* 通过name获取 Bean.
*
* @param beanName beanName
* @return
*/
public static Object getBean(String beanName) {
return getApplicationContext().getBean(beanName);
}
/**
* 通过class获取Bean.
*
* @param clazz class
* @param <T>
* @return
*/
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
}