Spring MVC-XMLファイルなしのJavaConfigまたはプロジェクト構成

親愛なるハブラフ人の皆さん、こんにちは。 どういうわけか、小さなプロジェクトを書く必要がありました。自由にテクノロジーを選択する機会があったので、 Spring Frameworkを使用することにしました。 私はこのフレームワークの第一人者ではないことをすぐに言いたいと思います。編集に感謝します。



ハブで少し検索したので、今伝えたいことやデモンストレーションしたいことを正確に見つけることができませんでした。 したがって、このトピックに関する投稿を書くことにしました。 JavaConfigについて、つまり* .xml構成を使用せずにSpring MVCプロジェクトを構成する方法について説明します。例:(mvc-dispatcher-servlet.xml)。



Spring MVCのテーマについては、 ここここでいくつかの優れた資料がありますが、これらの例ではxml構成を使用しています。 JavaConfigを使用してSpring MVCプロジェクト構造を作成する方法を示します。



JavaConfigとは何ですか?



JavaConfigは通常のXML構成の代替手段ですが、xmlマークアップではなくJava構文を使用します。

私はJavaConfigを使用するのが好きです、主にJavaであるため、便利なJavaコードが表示され、2番目に、構成を記述するときにほとんどの構成エラーをキャッチできます。私の場合、お気に入りのIDEが役立ちます、これはIntellij IDEAですが、 IDEがすべてがクールだと言っている場合、コンパイル時に構成エラーをキャッチする機会があります。



利点:


1.私の意見では、主な利点はJava構文です。

2.コードの操作、コードの自動生成、値の自動置換、ツールチップなどに関するIDEのすべての機能を利用できます。

3.オブジェクトとそのメソッドの使用による柔軟性の向上。

4. xml構成の障害をキャッチするために、プロジェクトを完全に組み立ててデプロイする必要はありません。 (ただし、例外があります。例: NullPointerException )。



JavaConfigは別のプロジェクトとして存在していましたが、Spring Core 3.0以降、このプロジェクトはコアプロジェクトの一部になりました。 JavaConfigを使用して設定を記述できるようにするには、Spring Core 3+を使用するだけで十分です。



XMLを使用した標準構成



最初に、XML構成を使用してSpring MVCプロジェクトの構造と構成を見てみましょう。その後、JavaConfigに移行します。

これはプロジェクト構造のようです:





pom.xmlに依存関係を追加することから始めましょう。

<properties> <spring.version>3.2.9.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
      
      







次に、単純なjsp index.jspページを作成します。

 <html> <body> <h1>Message : ${message}</h1> </body> </html>
      
      







そして、構成に関係のない最後のものはHelloController.javaコントローラーです:

 package com.devcolibri.common.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/welcome") public class HelloController { @RequestMapping(method = RequestMethod.GET) public String printWelcome(ModelMap model) { model.addAttribute("message", "Spring 3 MVC - Hello World"); return "hello"; } }
      
      







これで、構成に加えて、機能するSpring MVCプロジェクトを取得するために必要なすべてが揃いました。 さらに検討します。

Spring MVCプロジェクトのすべての詳細を説明しているわけではないことに注意してください。このテーマについてはすでにハブに投稿がありました。



次に、XMLファイルを使用してプロジェクトを構成する方法を見ていきます。 mvc-dispatcher-servlet.xmlから始めましょう。プロジェクトを構成するのはこのファイルです。ここでは、基本的にすべてのBeanについて説明します。



mvc-dispatcher-servlet.xmlファイルの内容:

 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.devcolibri.common.controller" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans>
      
      





この構成では、 context:component-scanタグを使用してすべてのコントローラー、サービス、およびその他のコンポーネントを探す場所を示し、この場合はビューを表示するInternalResourceViewResolverを初期化します。これはjspページです。



JavaConfigベースの構成



JavaConfigは単純なJavaクラスであるため、図4に示すように、それらの構成パッケージを作成します。 以下に、 web.xmlmvc-dispatcher-servlet.xmlがすでにない新しいプロジェクト構造もここにあります。







プロジェクト構造からわかるように、 configパッケージには2つのクラスがあり、それらはxml構成の代替です。

WebConfigから始めましょう:



 package com.devcolibri.common.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @Configuration @EnableWebMvc @ComponentScan("com.devcolibri.common") public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/WEB-INF/pages/**").addResourceLocations("/pages/"); } @Bean public InternalResourceViewResolver setupViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/pages/"); resolver.setSuffix(".jsp"); resolver.setViewClass(JstlView.class); return resolver; } }
      
      







注釈:


@Configuration-この注釈は、実際にはこのクラスがJava構成であることを示しています。

@EnableWebMvc-この注釈により、プロジェクトでMVCを使用できます。

@ComponentScan( "com.devcolibri.common") - mvc-dispatcher-servlet.xmlにあったコンポーネントスキャンと同様に、プロジェクトコンポーネントの検索場所を指示します。

Bean-これはBean初期化であり、DIを使用して作成されることを示します。



構成


WebMvcConfigurerAdapter-このクラスから継承して、 ResourceLocationsを構成する機会を得ます。

addResourceHandlers(ResourceHandlerRegistryレジストリ) -このメソッドをオーバーライドして、css、image、jsなどのプロジェクトリソースの場所を指定できます。

InternalResourceViewResolver -mvc-dispatcher-servlet.xmlを使用した同様の構成。

 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean>
      
      





次に、Spring Contextに構成を登録する必要があります。これにより、 AppInitクラスを作成できます。

 package com.devcolibri.common.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class AppInit extends AbstractAnnotationConfigDispatcherServletInitializer { //        Beans //        @Bean @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[]{ WebConfig.class }; } //   ,    ViewResolver @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{ WebConfig.class }; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
      
      







必要な依存関係とプラグインを追加します


さらに2つの依存関係をpom.xmlに追加する必要があります。

 <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
      
      







そして今、 web.xmlファイルの必要性を無効にすることができるmaven-war-pluginを追加する必要があります。

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin>
      
      







以上です。 この資料がお役に立てば幸いです。

ps私は第一人者ではないので、コードを編集させていただきます。



All Articles