SpringBootコンテナの主なコンポーネント
SpringBoot は Spring Framework に基づく迅速な開発フレームワークであり、開発者が独立した運用レベルのデプロイ可能なアプリケーションを迅速に構築するのに役立ちます。SpringBoot は、埋め込み Tomcat コンテナをデフォルトの Web コンテナとして提供し、他の Web コンテナやアプリケーション サーバー (Jetty、Undertow、WebSphere など) もサポートします。SpringBoot アプリケーションにおいて、コンテナは、アプリケーションのライフ サイクルの管理、リクエストと応答の処理、オブジェクトのライフ サイクルの管理などを担う非常に重要なコンポーネントです。この記事では、SpringBoot コンテナの主なコンポーネントとその機能を紹介します。
SpringBootコンテナの主なコンポーネント
SpringBoot コンテナの主なコンポーネントには次のものがあります。
- SpringApplication
- アプリケーションコンテキスト
- ディスパッチャサーブレット
- WebMvcコンフィギュラー
- フィルター
- サーブレット
- 埋め込みサーブレットコンテナ
これらのコンポーネントの機能と使用方法を以下に説明します。
1. Springアプリケーション
SpringApplication は SpringBoot アプリケーションのコア クラスであり、SpringBoot アプリケーションの起動を担当し、Spring Framework の ApplicationContext コンテナの初期化と構成を担当します。SpringApplication は、さまざまなニーズに応じて SpringBoot アプリケーションを作成および起動するための複数の静的メソッドを提供します。
以下は、SpringApplication を使用して SpringBoot アプリケーションを開始する方法を示す簡単なサンプル コードです。
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
上記のサンプル コードでは、最初に @SpringBootApplication アノテーションを追加しました。これは、@Configuration、@EnableAutoConfiguration、@ComponentScan アノテーションを含む結合アノテーションです。次に、SpringApplication.run() メソッドを使用して SpringBoot アプリケーションを起動しました。このメソッドは、アプリケーションのメイン クラスとコマンドライン引数という 2 つのパラメーターを受け取ります。
2. アプリケーションコンテキスト
ApplicationContext は Spring Framework のコア コンテナであり、アプリケーション内の各 Bean オブジェクトの管理と編成を担当し、依存関係注入、AOP、イベント メカニズムなどの機能を提供します。SpringBoot アプリケーションでは、ApplicationContext が SpringApplication クラスによって作成および初期化されます。
以下は、ApplicationContext インスタンスを取得する方法を示す簡単なサンプル コードです。
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(MyApp.class, args);
MyBean myBean = context.getBean(MyBean.class);
myBean.doSomething();
}
}
上記のサンプル コードでは、まず SpringApplication.run() メソッドを使用して SpringBoot アプリケーションを起動し、ApplicationContext インスタンスを取得します。次に、ApplicationContext.getBean() メソッドを使用して MyBean という名前の Bean インスタンスを取得し、その doSomething() メソッドを呼び出します。
3. Dispatcherサーブレット
DispatcherServlet は Spring Framework の Web MVC フレームワークのコア コンポーネントであり、HTTP リクエストとレスポンスを処理し、対応するコントローラにリクエストを配布し、コントローラのレスポンスをクライアントに返す役割を果たします。SpringBoot アプリケーションでは、DispatcherServlet が Spring MVC 自動構成によって作成および初期化されます。
以下は、DispatcherServlet を使用して HTTP リクエストとレスポンスを処理する方法を示す簡単なサンプル コードです。
@Controller
public class MyController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World!";
}
}
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
上記のサンプル コードでは、まず、パス /hello の GET リクエストを処理し、文字列「Hello World!」を返す MyController というコントローラーを定義しました。次に、SpringBoot アプリケーションを起動します。これにより、DispatcherServlet が自動的に作成および初期化され、MyController が DispatcherServlet に登録されました。
4.WebMvcConfigurer
WebMvcConfigurer は Spring MVC の構成インターフェイスであり、Spring MVC フレームワークのさまざまなオプションを構成するために使用できる複数のメソッドを提供します。SpringBootアプリケーションでは、Spring MVC自動設定によりWebMvcConfigurerが作成・初期化され、このインタフェースを実装することでSpring MVCフレームワークの機能拡張・カスタマイズが可能となる。
以下は、WebMvcConfigurer を使用して Spring MVC フレームワークのオプションを構成する方法を示す簡単なサンプル コードです。
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
上記のサンプル コードでは、まず MyWebMvcConfigurer という名前の構成クラスを定義します。これは、WebMvcConfigurer インターフェイスを実装し、クロスオリジン リソース共有 (CORS) オプションを構成するための addCorsMappings() メソッドをオーバーライドします。次に、SpringBoot アプリケーションを起動します。これにより、DispatcherServlet が自動的に作成および初期化され、MyWebMvcConfigurer が DispatcherServlet に登録されました。
5. フィルター
フィルタは Java サーブレット API のコアコンポーネントの 1 つで、HTTP リクエストとレスポンスの処理を担当し、リクエストとレスポンスの間にさまざまなロジック処理を追加できます。SpringBoot アプリケーションでは、Filter インターフェイスを実装するか、OncePerRequestFilter クラスを継承することで、Filter を実装できます。
以下は、Filter を使用して HTTP リクエストとレスポンスを処理する方法を示す簡単なサンプル コードです。
@Component
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
System.out.println("Request URL: " + httpRequest.getRequestURL());
chain.doFilter(request, response);
}
}
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
上記のサンプル コードでは、まず MyFilter という名前のフィルターを定義します。これは、HTTP リクエストの処理時にリクエストされた URL を出力します。次に、SpringBoot アプリケーションのコンテナに MyFilter を登録し、アプリケーションの起動後に自動的に Filter の作成と初期化を行い、埋め込み Tomcat コンテナに登録します。
6. サーブレット
サーブレットは、Java サーブレット API のコア コンポーネントの 1 つで、HTTP リクエストと応答の処理を担当します。SpringBoot アプリケーションでは、Servlet インターフェイスを実装するか、HttpServlet クラスを継承することで、Servlet を実装できます。
以下は、サーブレットを使用して HTTP リクエストとレスポンスを処理する方法を示す簡単なサンプル コードです。
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Hello World!");
}
}
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
上記のサンプル コードでは、まず MyServlet という名前のサーブレットを定義します。これは、HTTP リクエストを処理するときに文字列「Hello World!」を返します。次に、SpringBoot アプリケーションのコンテナに MyServlet を登録し、アプリケーションの起動後に自動的にサーブレットの作成と初期化を行い、埋め込み Tomcat コンテナに登録します。
7. 埋め込みサーブレットコンテナ
EmbeddedServletContainer は SpringBoot の組み込み Web コンテナであり、HTTP リクエストとレスポンスを処理し、アプリケーションのライフサイクルを管理します。SpringBoot は、Tomcat、Jetty、Undertow など、さまざまな組み込み Web コンテナをサポートしています。
以下は、EmbeddedServletContainer を使用して埋め込み Tomcat コンテナを起動する方法を示す簡単なサンプル コードです。
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MyApp.class);
app.addListeners(new ApplicationPidFileWriter());
ConfigurableApplicationContext context = app.run(args);
EmbeddedServletContainer container = context.getBean(EmbeddedServletContainer.class);
container.start();
}
}
上記のサンプルコードでは、まず SpringApplication インスタンスを作成し、ApplicationPidFileWriter モニターを追加しました。