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の関係
-
BeanFactoryとApplicationContextはSpringの2つのコアインターフェイスであり、ApplicationContextはBeanFactoryのサブインターフェイスです。これらはすべてSpringコンテナとして使用できます。Springコンテナは、Beanインスタンスを生成し、コンテナ内のBeanを管理するファクトリです。SpringベースのJavaEEアプリケーションでは、データソース、HibernateのSessionFactory、トランザクションマネージャーなどを含むすべてのコンポーネントがBeanとして扱われます。
-
生活の中で、私たちは一般的に製品が製造される場所をファクトリーと呼びます。ここでのBeanオブジェクトの正式な名前はBeanFactoryであり、これは文字通りBean Factory(com.springframework.beans.factory.BeanFactory)として翻訳されます。通常、BeanFactoryをIoCコンテナと呼びます。ApplicationContextはアプリケーションコンテキストと呼ばれます。
-
Springのコアはコンテナであり、コンテナは一意ではありません。フレームワーク自体が多くのコンテナ実装を提供し、大きく2つのタイプに分けられます。1つは未使用のBeanFactoryで、最も単純なコンテナであり、基本的なDI機能しか提供できません。 1つはBeanFactoryから派生したApplicationContext(アプリケーションコンテキスト)であり、構成テキスト情報の解析など、よりエンタープライズレベルのサービスを提供できます。これは、ApplicationContextインスタンスオブジェクトの最も一般的なアプリケーションシナリオでもあります。