【Spring】Spring IOC容器以外でSpring IOCコンテキストを取得する環境
3517 ワード
前言
Spring Webプロジェクトでは、特別な場合にはSpring IOC容器以外でSpring IOC容器のコンテキスト環境を取得する必要があります.例えば、あるbeanを取得します.
バージョンの説明
POMファイルを宣言し、導入するJARを指定します.
ツールの種類を書いてApplication Contact Awareを実現して、それから配置ファイルで登録します.Application Contect Awareを実現するための抽象的な方法
このUserServiceは@Serviceまたは@Componentとして注釈されていません.Spring IOC容器の下で管理されているのではなく、そのクラスを使ってnewキーワードによって実装されている可能性があります.Especial Business Serviceはインターフェースで、MyEspecial Business Service 1とMyEspecial Business Service 2はこのインターフェースを実現し、@Serviceと注釈しています.以下の例は単一のbeanとEspecial Business Serviceインターフェースのセットbeanを取得することを試みる.
Spring Webプロジェクトでは、特別な場合にはSpring IOC容器以外でSpring IOC容器のコンテキスト環境を取得する必要があります.例えば、あるbeanを取得します.
バージョンの説明
POMファイルを宣言し、導入するJARを指定します.
<properties>
<spring.version>4.0.9.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
</dependencies>
Apple Contect Awareを実現ツールの種類を書いてApplication Contact Awareを実現して、それから配置ファイルで登録します.Application Contect Awareを実現するための抽象的な方法
setApplicationContect()
が必要で、容器はこの方法を呼び出してコンテキストオブジェクトApplicationContext
を設定します.package util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext ac)
throws BeansException {
applicationContext = ac;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* Class IOC
* @param clazz Class
* @return
*/
public static <T> List<T> getBeanByType(Class<T> clazz) {
List<T> list = new ArrayList<T>();
/* */
String[] beanNames = applicationContext.getBeanNamesForType(clazz);
System.out.println("getBeanByType beanNames : " + beanNames == null ? "" : Arrays.toString(beanNames));
if (beanNames == null || beanNames.length == 0) {
return list;
}
T t = null;
for (String beanName : beanNames) {
t = (T)applicationContext.getBean(beanName);
list.add(t);
}
return list;
}
}
<bean class="util.ApplicationContextUtil" />
Spring IOC容器内ではなく、Spring IOC容器にアクセスする環境このUserServiceは@Serviceまたは@Componentとして注釈されていません.Spring IOC容器の下で管理されているのではなく、そのクラスを使ってnewキーワードによって実装されている可能性があります.Especial Business Serviceはインターフェースで、MyEspecial Business Service 1とMyEspecial Business Service 2はこのインターフェースを実現し、@Serviceと注釈しています.以下の例は単一のbeanとEspecial Business Serviceインターフェースのセットbeanを取得することを試みる.
package service;
import java.util.List;
import util.ApplicationContextUtil;
public class UserService {
public void update() {
MyEspecialBusinessService2 service2 = ApplicationContextUtil.getApplicationContext().getBean(MyEspecialBusinessService2.class);
System.out.println("service2 : " + service2);
List<EspecialBusinessService> serviceList = ApplicationContextUtil.getBeanByType(EspecialBusinessService.class);
System.out.println("getBeanByType(EspecialBusinessService.class) : " + serviceList);
}
}