5. ApplicationContextの種類
Spring は、に適したさまざまなタイプの ApplicationContext コンテナを提供しますdifferent requirements
。これらは の実装ですApplicationContext interface
。それでは、ApplicationContext の一般的なタイプをいくつか見てみましょう。
5.1. AnnotationConfigApplicationContext
AnnotationConfigApplicationContextクラスは Spring 3.0 で導入されました。
@Configuration、@Component、および JSR-330 メタデータで注釈が付けられたクラスを入力として受け取ることができます。
ApplicationContext context = new AnnotationConfigApplicationContext(AccountConfig.class);
AccountService accountService = context.getBean(AccountService.class);
5.2. AnnotationConfigWebApplicationContext
AnnotationConfigWebApplicationContext は、AnnotationConfigApplicationContext の Web ベースのバリアントです。
このクラスは、web.xml ファイルでSpring のContextLoaderListener
サーブレット リスナーまたは Spring MVC を設定するときに使用できます。DispatcherServlet
さらに、Spring 3.0 以降では、このアプリケーション コンテキスト コンテナをプログラムで構成することもできます。必要なのは、WebApplicationInitializerインターフェイスを実装することだけです。
public class MyWebApplicationInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AccountConfig.class);
context.setServletContext(container);
// servlet configuration
}
}
5.3. XmlWebApplicationContext
Web アプリケーションで XML ベースの構成を使用する場合は、XmlWebApplicationContextクラスを使用できます。
実際のところ、このコンテナの構成は AnnotationConfigWebApplicationContext クラスのみに似ています。つまり、web.xml で構成することも、WebApplicationInitializer インターフェイスを実装することもできます。
public class MyXmlWebApplicationInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
XmlWebApplicationContext context = new XmlWebApplicationContext();
context.setConfigLocation("/WEB-INF/spring/applicationContext.xml");
context.setServletContext(container);
// Servlet configuration
}
}
5.4. ファイルシステムXMLアプリケーションコンテキスト
FileSystemXMLApplicationContextクラスを使用して、ファイル システムまたは URL から XML ベースの Spring 構成ファイルをロードします。このクラスは、ApplicationContext をプログラムでロードする必要がある場合に役立ちます。一般に、テスト ハーネスやスタンドアロン アプリケーションは、これに使用できるケースの一部です。
たとえば、この Spring コンテナを作成し、XML ベースの構成用の Bean をロードする方法を見てみましょう。
String path = "C:/myProject/src/main/resources/applicationcontext/account-bean-config.xml";
ApplicationContext context = new FileSystemXmlApplicationContext(path);
AccountService accountService = context.getBean("accountService", AccountService.class);
5.5. ClassPathXmlApplicationContext
XML 構成ファイルをクラスパスからロードしたい場合は、ClassPathXmlApplicationContextクラスを使用できます。FileSystemXMLApplicationContext と同様に、テスト ハーネスだけでなく、JAR 内に埋め込まれたアプリケーション コンテキストにも役立ちます。
このクラスの使用例を見てみましょう。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext/account-bean-config.xml");
AccountService accountService = context.getBean("accountService", AccountService.class);