import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* Created on 2020/3/26 15:19
*
* @author Johny
* @desc 對Spring容器進行各種上下文操作的工具類
* <p>
* 該工具類必須聲明爲Spring 容器裏的一個Bean對象,否則無法自動注入ApplicationContext對象
* <p>
* 可使用@Component註解實例化,注意要開啓包掃描並且所在包路徑能被掃描到
*/
@Component
public class ContextUtils implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
/**
* 根據Bean名稱獲取Bean對象
*
* @param name Bean名稱
* @return 對應名稱的Bean對象
*/
public static Object getBean(String name) {
return context.getBean(name);
}
/**
* 根據Bean的類型獲取對應的Bean
*
* @param requiredType Bean類型
* @return 對應類型的Bean對象
*/
public static <T> T getBean(Class<T> requiredType) {
return context.getBean(requiredType);
}
/**
* 根據Bean名稱獲取指定類型的Bean對象
*
* @param name Bean名稱
* @param requiredType Bean類型(可爲空)
* @return 獲取對應Bean名稱的指定類型Bean對象
*/
public static <T> T getBean(String name, Class<T> requiredType) {
return context.getBean(name, requiredType);
}
/**
* 判斷是否包含對應名稱的Bean對象
*
* @param name Bean名稱
* @return 包含:返回true,否則返回false。
*/
public static boolean containsBean(String name) {
return context.containsBean(name);
}
/**
* 獲取對應Bean名稱的類型
*
* @param name Bean名稱
* @return 返回對應的Bean類型
*/
public static Class<?> getType(String name) {
return context.getType(name);
}
/**
* 獲取上下文對象,可進行各種Spring的上下文操作
*
* @return Spring上下文對象
*/
public static ApplicationContext getContext() {
return context;
}
}