【问题标题】:Benefits of JavaConfig over XML configurations in Spring?Spring 中 JavaConfig 相对于 XML 配置的优势?
【发布时间】:2015-05-23 14:40:26
【问题描述】:

早期的配置用于在代码中进行硬编码,后来它被外部化为 .property 文件(为了避免硬编码值,避免为了更改配置而更改代码......等等)然后它转移到XML(为了更加标准化,无错误..等)

现在,在阅读 Spring 3 中的 @Configuration 时,看起来我们又回到了最初的方法。

为什么我们要在代码中硬编码配置而不是 外化了吗?

【问题讨论】:

    标签: spring annotations spring-3 spring-annotations


    【解决方案1】:

    有一些优点

    1. Java 是类型安全的。如果您是,编译器将报告问题 配置正确的 bean 类限定符。
    2. 基于配置的 XML 可以迅速变大。 [是的,我们可以分开 并导入但仍然]
    3. 搜索更简单,重构会很幸福。寻找一颗豆子 定义会容易得多。

    仍然有人喜欢 XML 配置并继续这样做。

    参考资料: Java configuration advantages Some more reasons

    【讨论】:

    • 这取决于Java类中加载了什么样的配置。据我们所知,将所有配置放在一个地方总是安全的。我们应该以更广阔的视野或更大的范围思考一切。在不构建应用程序的情况下,我们可以使应用程序在不同的环境中以不同的方式运行。
    • @prashanth-g 单体配置文件?规模大?我不认为这计算。想象一下来自不同模块的多个开发人员的多个配置更改。我宁愿在小型模块化配置文件中进行每项更改,而不是在一个地方进行。
    • @jonasespelita 那是一个多集群环境中的单体应用程序。在此设置中,我们认为在 XML 文件中包含某些配置(如 IP、URL 等)会是更好的解决方案。但这取决于您的需求和环境。进一步检查stackoverflow.com/questions/182393/…
    • @prashanth-g 猜测最初的问题是关于 Java 配置的优势。这不是关于一个是否比另一个更好。由于两者都受支持,您可以做出选择。我们还在做单片吗?
    【解决方案2】:

    给出了正确答案here,除此之外,我再给一分

    根据Spring 5 reference

    基于 XML 的元数据不是唯一允许的配置形式 元数据。 Spring IoC 容器本身与 实际写入此配置元数据的格式。 如今,许多开发人员选择基于 Java 的配置作为他们的 Spring 应用程序。

    这意味着现在,人们正在转向基于 java 的配置

    例如:xml 中的 Spring web-mvc 配置

    <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="controller" />
        <context:component-scan base-package="dao" />
        <context:component-scan base-package="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("controller"),
            @ComponentScan("dao"),
            @ComponentScan("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。

    【讨论】:

    • gr8 示例。但是不同环境的配置呢?这不再是编译后的时间,这是一个主要缺点
    • 基于java的配置没用,spring的主要好处是与java的解耦,所以你可以在不重新编译或重建的情况下更改配置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2017-03-19
    • 2010-12-23
    • 2015-07-23
    • 2011-02-26
    • 1970-01-01
    相关资源
    最近更新 更多