Implemente la interfaz ApplicationContextAware para obtener todos los objetos de bean y los valores de propiedad

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.xmle 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);
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_35207086/article/details/124272878
Recomendado
Clasificación