スプリングMVC運動原理(6):スプリングMVC連動
サーブレットアプリケーションへのスプリングのバインド
スプリングによって提供されるIoC容器を使用する方法スプリングを使用して提供するサーバインプリメンテーションDispatcherServicelet
DispatcherServletスプリングMVCのコア. Front Controlの役割を果たします. 作成 Handler
このように空を認識して登録するには@ComponentScanを修正する必要があります. AppConfig@ComponentScan修正 DispatcherServicelet作成されたServicelet WebApplicationContextスプリングプロファイル を生成するために使用される DispatcherServicelet作成およびDispatcherServicelet作成のServicelet WebアプリケーションContextで使用するスプリングプロファイル登録
ここで見られる構造はSpringBootとは異なり、まずSpliteコンテナをポップアップし、Spliteコンテナに登録されているWebアプリケーションにContextLoaderListerとDispatcherServiceletを登録してSpringを開始することです.(構造にスプリングを含む)
しかしSpring BootではSpring BootアプリケーションがまずJavaアプリケーションとして出現し,ここでTomcatが組み込みサーバとして出現する.また、DispatcherServiceletをコードとしてimbedd Tomcatに登録します.(springというJavaアプリケーションにTomcatが含まれている構造)
リファレンスインフラストラクチャ:SpringWeb MVC(白旗船) http://www.corej2eepatterns.com/FrontController.htm https://www.oracle.com/technetwork/java/frontcontroller-135648.html https://martinfowler.com/eaaCatalog/frontController.html
スプリングによって提供されるIoC容器を使用する方法
6.スプリングMVC連動
DispatcherServlet
@RestController
public class HelloController {
@Autowired
HelloService helloService;
@GetMapping("/hello")
public String hello() {
return "Hello, " + helloService.getName();
}
}
コントローラはDispatcherServiceletが作成したServicelet Webアプリケーションコンテキストに登録する必要があり、サービスはContextLoaderListenerが作成したRoot Webアプリケーションコンテキストに登録する必要があります.サーブレットWebApplicationContextは、RootWebApplicationContextのサブアイテムであるため、サービスオブジェクトを参照できます.このように空を認識して登録するには@ComponentScanを修正する必要があります.
@Configuration
@ComponentScan(excludeFilters = @ComponentScan.Filter(Controller.class))
public class AppConfig {
}
コントローラはRootWebApplicationContextに空に登録されません.サービスのみが空に登録されています.@Configuration
@ComponentScan(useDefaultFilters = false, includeFilters = @ComponentScan.Filter(Controller.class))
public class WebConfig {
}
コントローラのみがサーブレットWebApplicationContextに空に登録されています.他のHandleMappingやViewResolverなどはこの中で空に登録すればいいです.<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>org.example.servlet02.AppConfig</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>org.example.servlet02.WebConfig</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
ただし、複数のDispatcherServiceletを使用しない場合は、ContextLoaderListerおよびRootWebApplicationContextを作成する必要はありません.また、DispatcherServiceletによって生成されたサーブレットWebApplicationContextを使用して、ルートとしてすべての空を登録することもできます.<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>org.example.servlet02.WebConfig</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
@Configuration
@ComponentScan
public class WebConfig {
}
また、DispatcherServiceletによって生成されたサーブレットWebアプリケーションコンテキストにはすべての空を登録し、ContextLoaderListenerによって生成されたRoot Webアプリケーションコンテキストにはすべての空を登録することができますが、これは良い設定ではありません.ここで見られる構造はSpringBootとは異なり、まずSpliteコンテナをポップアップし、Spliteコンテナに登録されているWebアプリケーションにContextLoaderListerとDispatcherServiceletを登録してSpringを開始することです.(構造にスプリングを含む)
しかしSpring BootではSpring BootアプリケーションがまずJavaアプリケーションとして出現し,ここでTomcatが組み込みサーバとして出現する.また、DispatcherServiceletをコードとしてimbedd Tomcatに登録します.(springというJavaアプリケーションにTomcatが含まれている構造)
リファレンス
Reference
この問題について(スプリングMVC運動原理(6):スプリングMVC連動), 我々は、より多くの情報をここで見つけました https://velog.io/@jsj3282/스프링-MVC-동작-원리6-스프링-MVC-연동テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol