ApplicationContextAwareインターフェースを実装して、すべてのBeanオブジェクトとプロパティ値を取得します

0.問題の背景

Webプログラムでは、通常、Springはすべてのインスタンス(Bean)を管理するために使用され、プログラムでインスタンス化されたBeanを使用するために、通常、次のようなコードが使用されます。

ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext-common.xml");  
AbcService abcService = (AbcService)appContext.getBean("abcService");  

ただし、これには問題がapplicationContext-common.xmlあります。コンテキストBeanをリロードしてインスタンス化するため、一部のスレッド構成クラスもこの構成ファイルに含まれていると、同じ作業を行うスレッドが2回開始されます。1回は、Webコンテナが初期化されたとき、もう1回は、上記のコードで示されているようにインスタンス化されたときです。それはそれを再び初期化するようなものです!これにより、冗長性が生まれます。

1.解決策

クラスがこのインターフェース(ApplicationContextAware)を実装する場合、このクラスはApplicationContext内のすべてのBeanを簡単に取得できます。つまり、このクラスは、 Spring構成ファイル内の参照されているすべてのBeanオブジェクトを直接取得できます。同時に、対応する値が「キー」に従って取得されます。

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

おすすめ

転載: blog.csdn.net/qq_35207086/article/details/124272878