春はiocインスタンスを取得します

1.BeanFactoryAwareインターフェース

BeanFactoryAwareインターフェースを実装するクラスは、BeanFactoryオブジェクトを取得できるため、iocコンテナー内のインスタンスはBeanファクトリを介して取得できます。BeanFactoryは、Springコンテナーの最も基本的なインターフェースでもあります。彼は、iocコンテナー内のBeanの構成、作成、および管理を担当しています。


package com.business.platform.spring;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.stereotype.Component;

/**
 * @ClassName BeanUtils
 * @Description: 获取spring ioc容器中的实例工具
 * @Author xsl
 * @Date 2020/9/21 8:51
 */
@Component
public class BeanUtils implements BeanFactoryAware {
    
    
    /**
     * Spring的bean工厂
     */
    private static BeanFactory beanFactory;

    @Override
    public void setBeanFactory(BeanFactory factory) throws BeansException {
    
    
        beanFactory = factory;
    }

    public static <T> T getBean(String beanName) {
    
    
        return (T) beanFactory.getBean(beanName);
    }
}

2.ApplicationContextAwareインターフェース

ApplicationContextAwareを実装するクラスは、ApplicationContextを取得できます。BeanFactoryがSpingの心臓部である場合、ApplicationContextは完全な本体です。ApplicationContextインターフェイスの多くの実装クラスの中に、私たちがよく使用する3つの実装クラスがあり、これら3つの実装クラスを使用すると、基本的にJavaEEアプリケーション開発のほとんどのニーズを満たすことができます。

クラス名 機能の説明
ClassPathXmlApplicationContext ClassPathから指定されたXML構成ファイルを検索し、それを検索してロードして、ApplicationContextのインスタンス化を完了します。
FileSystemXmlApplicationContext 指定されたファイルシステムパスから指定されたXML構成ファイルを検索し、検索してロードします
XmlWebApplicationContext Webアプリケーションから指定されたXML構成ファイルを検索し、それを検索してロードして、ApplicationContextのインスタンス化を完了します。これはWebプロジェクト向けに調整されています。WebApplicationContextUtilsクラスのgetRequiredWebApplicationContextメソッドを使用して、JSPおよびサーブレットのIoCコンテナへの参照を取得します。
package com.business.platform.spring;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @ClassName BeanUtils
 * @Description: 获取spring ioc容器中的示例工具
 * @Author xsl
 * @Date 2020/9/21 8:51
 */
@Component
public class BeanUtils implements ApplicationContextAware {
    
    
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    
    
        if (BeanUtils.applicationContext == null) {
    
    
            BeanUtils.applicationContext = applicationContext;
        }
    }

    /**
     * 获取applicationContext
     */
    public static ApplicationContext getApplicationContext() {
    
    
        return applicationContext;
    }

    /**
     * 通过name获取 Bean.
     * @param name
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name) {
    
    
        return(T) getApplicationContext().getBean(name);
    }

    /**
     *  通过class获取Bean.
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
    
    
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 通过name,以及Clazz返回指定的Bean
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
    
    
        return getApplicationContext().getBean(name, clazz);
    }

}

3.BeanFactoryとApplicationContextの関係

  1. BeanFactoryとApplicationContextはSpringの2つのコアインターフェイスであり、ApplicationContextはBeanFactoryのサブインターフェイスです。これらはすべてSpringコンテナとして使用できます。Springコンテナは、Beanインスタンスを生成し、コンテナ内のBeanを管理するファクトリです。SpringベースのJavaEEアプリケーションでは、データソース、HibernateのSessionFactory、トランザクションマネージャーなどを含むすべてのコンポーネントがBeanとして扱われます。

  2. 生活の中で、私たちは一般的に製品が製造される場所をファクトリーと呼びます。ここでのBeanオブジェクトの正式な名前はBeanFactoryであり、これは文字通りBean Factory(com.springframework.beans.factory.BeanFactory)として翻訳されます。通常、BeanFactoryをIoCコンテナと呼びます。ApplicationContextはアプリケーションコンテキストと呼ばれます。

  3. Springのコアはコンテナであり、コンテナは一意ではありません。フレームワーク自体が多くのコンテナ実装を提供し、大きく2つのタイプに分けられます。1つは未使用のBeanFactoryで、最も単純なコンテナであり、基本的なDI機能しか提供できません。 1つはBeanFactoryから派生したApplicationContext(アプリケーションコンテキスト)であり、構成テキスト情報の解析など、よりエンタープライズレベルのサービスを提供できます。これは、ApplicationContextインスタンスオブジェクトの最も一般的なアプリケーションシナリオでもあります。

おすすめ

転載: blog.csdn.net/qq_44132240/article/details/113329656