工具类主动从IOC容器中获取实例
在工作中,我们常常只有将类注入到我们的容器中才能进行自动装载,但是有一些情境下,我们需要主动获取容器中的实例,可以通过该工具类实现。
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import java.util.Map;
public class SpringContextUtil implements ApplicationContextAware {
// Spring应用上下文环境
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* 取得存储在静态变量中的ApplicationContext.
*
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*
* @param <T> 泛型
* @param name bean name
* @return bean
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
Object obj = applicationContext.getBean(name);
if (obj == null) {
throw new IllegalArgumentException("can not found bean for id "" + name + """);
}
return (T) obj;
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*
* @param <T> 泛型
* @param clazz bean class
* @return bean
*/
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
return applicationContext.getBean(clazz);
}
/**
* 获取指定类型的所有Bean实例
*
* @param clazz 类型
* @param <T> 泛型
* @return 指定类型的所有Bean实例,key位 bean name,value为实例
*/
public static <T> Map<String, T> getBeansOfType(Class<T> clazz) {
checkApplicationContext();
return applicationContext.getBeansOfType(clazz);
}
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext is not setted.");
}
}
}
以上是 工具类主动从IOC容器中获取实例 的全部内容, 来源链接: utcz.com/z/517368.html