目次
実装の概要
- 初期化中にApplicationContextオブジェクトを保存します
- Springが提供するツールクラスを介してApplicationContextオブジェクトを取得します
- 抽象クラスApplicationObjectSupportから継承されます
- 抽象クラスWebApplicationObjectSupportから継承されます
- インターフェースApplicationContextAwareを実装します
1.ApplicationContextオブジェクトを保存します
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
注:この方法は、Springフレームワークを使用する独立したアプリケーションに適しており、プログラムは構成ファイルを使用してSpringを手動で初期化する必要があります。
2.ApplicationContextオブジェクトを取得します
import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");
注:
このメソッドは、Springフレームワークを使用するB / Sシステムに適しています。ApplicationContextオブジェクトはServletContextオブジェクトを介して取得され、次に必要なクラスインスタンスがそれを介して取得されます。
上記の2つのツールの違いは、前者は取得が失敗したときに例外をスローし、後者はnullを返すことです。
3.抽象クラスApplicationObjectSupportから継承されます
説明:抽象クラスApplicationObjectSupportは、ApplicationContextを簡単に取得できるgetApplicationContext()メソッドを提供します。
Springが初期化されると、ApplicationContextオブジェクトは、この抽象クラスのsetApplicationContext(ApplicationContext context)メソッドを介して注入されます。
4.抽象クラスWebApplicationObjectSupportから継承されます
説明:上記のメソッドと同様に、getWebApplicationContext()を呼び出してWebApplicationContextを取得します
5.インターフェースApplicationContextAwareを実装します
package com.itheima.hchat.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @Description: 提供手动获取被spring管理的bean对象
*/
@Component
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
}
// 获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
// 通过name获取 Bean.
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
// 通过class获取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
// 通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
説明:このインターフェイスのsetApplicationContext(ApplicationContext context)メソッドを実装し、ApplicationContextオブジェクトを保存します。
Springが初期化されると、ApplicationContextオブジェクトがこのメソッドを介して注入されます。