web-dev-qa-db-ja.com

SpringのXML構成に対するJavaConfigの利点は?

以前の構成はコードでハードコーディングされていましたが、後で.propertyファイルに外部化され(ハードコーディングされた値を回避するため、構成を変更するためにコードを変更することを回避するなど)、XMLに移動しました(より標準化されているため、エラーがありません。

さて、Spring 3の@Configurationについて読んでいると、再び最初のアプローチに戻っているようです。

構成を外部化するのではなく、コード内でハードコーディングする必要があるのはなぜですか?

36
yathirigan

いくつかの利点があります

  1. Javaは型安全です。適切なBeanクラス修飾子を設定している場合、コンパイラは問題を報告します。
  2. 構成に基づくXMLはすぐに大きくなる可能性があります。 [はい、分割してインポートできますが、それでも]
  3. 検索がはるかに簡単になり、リファクタリングが至福になります。 Bean定義を見つけるのははるかに簡単です。

XML構成が好きで、それを続けている人々がまだいます。

参照: Java構成の利点その他の理由

33
Narain

Spring 5 reference によると

XMLベースのメタデータだけが、構成メタデータの許可された形式ではありません。 Spring IoCコンテナー自体は、この構成メタデータが実際に書き込まれる形式から完全に切り離されています。最近では、多くの開発者がSpringアプリケーションにJavaベースの構成を選択しています。

今日、人々はJavaベースの設定に向かっている

例:xmlのSpring web-mvc config

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" 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-4.0.xsd     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    <context:component-scan base-package="hms.controller" />
    <context:component-scan base-package="dao" />
    <context:component-scan base-package="hms.service" />

    <mvc:annotation-driven />

    <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>  

Javaベースのスタイルの同じ設定

@Configuration
@EnableWebMvc

@ComponentScans({
        @ComponentScan("hms.controller"),
        @ComponentScan("dao"),
        @ComponentScan("hms.service")      
})
public class WebMVCConfig implements WebMvcConfigurer {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/pages/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

分かりやすいものは何ですか?明らかに、Javaベースの設定は簡単に理解できます。

コードを書く人や他の人は、XMLよりもJavaコードを簡単に理解できます。Javaしか知らなければ、XMLについて知る必要はありません。

0
majuran