0. Antecedentes del problema
En los programas web, se suele utilizar spring para gestionar todas las instancias (beans), y en ocasiones para poder utilizar los beans instanciados en el programa se suele utilizar dicho código:
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext-common.xml");
AbcService abcService = (AbcService)appContext.getBean("abcService");
Pero hay un problema con esto: debido a que recarga applicationContext-common.xml
e instancia el bean de contexto, si algunas clases de configuración de subprocesos también están en este archivo de configuración, hará que los subprocesos que hacen el mismo trabajo se inicien dos veces. Una vez cuando se inicializa el contenedor web y una vez cuando se crea una instancia como se muestra en el código anterior. ¡Es como reiniciarlo de nuevo! ! ! ! Esto crea redundancia.
1. Solución
Cuando una clase implementa esta interfaz (ApplicationContextAware), esta clase puede obtener fácilmente todos los beans en ApplicationContext . En otras palabras, esta clase puede obtener directamente todos los objetos de bean a los que se hace referencia en el archivo de configuración de Spring . Al mismo tiempo, se obtiene el valor correspondiente según la "clave".
import lombok.Getter;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public final class SpringUtils implements ApplicationContextAware {
/**
*上下文对象
*/
@Getter
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringUtils.applicationContext == null) {
SpringUtils.applicationContext = applicationContext;
}
}
public static Object getBean(String name) {
return SpringUtils.applicationContext.getBean(name);
}
public static String getProperty(String key) {
//获取配置文件对象,根据key获取值
return SpringUtils.applicationContext.getEnvironment().getProperty(key);
}
}