工具类主动从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

回到顶部