获取ApplicationContext
对象是在使用Spring框架时非常常见的操作,可以方便地获取容器中的各种Bean实例。在Spring中,有多种方法可以获取ApplicationContext
对象,下面给出了两种常用的方式:
方式一:通过注解@Autowried来获取ApplicationContext对象
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextUtil {
private static ApplicationContext applicationContext;
/**
* 设置ApplicationContext对象
*
* @param context ApplicationContext对象
*/
public static void setApplicationContext(ApplicationContext context) {
applicationContext = context;
}
/**
* 获取ApplicationContext对象
*
* @return ApplicationContext对象
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 通过bean名称获取bean实例
*
* @param beanName bean名称
* @return 返回bean实例
*/
public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}
}
在普通的类中通过注解来获取ApplicationContext
对象,将其赋值到一个静态变量中,供其余的地方使用。
示例代码:
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class TestService implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextUtil.setApplicationContext(applicationContext);
}
/**
* 使用 static 方法获取bean实例
*/
public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}
/**
* 使用 @Autowired 注解获取bean实例
*/
public void test() {
ApplicationContext context = ApplicationContextUtil.getApplicationContext();
Bean bean = (Bean) context.getBean("bean");
// do something with bean
}
}
方式二:通过实现 ApplicationContextAware 接口来获取ApplicationContext对象
实现 ApplicationContextAware
接口,将获取到的 ApplicationContext
对象保存到静态变量中。
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 通过实现 ApplicationContextAware 接口来获取ApplicationContext对象
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextUtil.applicationContext = applicationContext;
}
/**
* 获取ApplicationContext对象
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 通过bean名称获取bean实例
*
* @param beanName bean名称
* @return 返回bean实例
*/
public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}
}
示例代码:
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class TestService implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 通过实现 ApplicationContextAware 接口获取ApplicationContext对象
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
TestService.applicationContext = applicationContext;
}
/**
* 使用 static 方法获取bean实例
*/
public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}
/**
* 使用注解获取bean实例
*/
public void test() {
Bean bean = (Bean) applicationContext.getBean("bean");
// do something with bean
}
}
以上两种方式都可以获取到 ApplicationContext
对象,并通过其获取到相应的 Bean
实例。需要注意的是,这两种方式实现的关键在于将 ApplicationContext
对象保存到静态变量中,以便全局使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring获取ApplicationContext对象工具类的实现方法 - Python技术站