1.3 约定优于配置极简化理念

Spring Boot充分利用了JavaConfig的配置模式以及“约定优于配置”(Convention Over Configuration, COC)的理念,极大地简化了基于Spring MVC的Web应用和REST服务的开发。

不用看那一堆带着无数尖括号的XML真的让人很神清气爽。用JavaConfig注解方式可以让人很容易明白配置代码中的关键信息。

例如,一个标准的基于Gradle构建的Spring Boot应用程序目录结构约定如下:

        .
        ├── LICENSE
        ├── README.md
        ├── build.gradle
        ├── gradle
        |    └── wrapper
        |        ├── gradle-wrapper.jar
        |        └── gradle-wrapper.properties
        ├── gradlew
        ├── gradlew.bat
        └── src
            ├── main
            |    ├── java
            |    ├── kotlin
            |    |    └── com
            |    |        └── easy
            |    |             └── Spring Boot
            |    |                  └── demo2_aop_logging
            |    |                       ├── Demo2AopLoggingApplication.kt
            |    |                       ├── aop
            |    |                       |    └── LogAspect.kt
            |    |                       └── controller
            |    |                            └── HelloAopController.kt
            |    └── resources
            |        ├── application-daily.properties
            |        ├── application-dev.properties
            |        ├── application-prod.properties
            |        ├── application.properties
            |        ├── static
            |        └── templates
            └── test
                ├── java
                ├── kotlin
                |    └── com
                |        └── easy
                |             └── Spring Boot
                |                  └── demo2_aop_logging
                |                       └── Demo2AopLoggingApplicationTests.kt
                └── resources
        23 directories, 20 files

目录文件简单说明如下:

❑build.gradle——Gradle工程项目配置文件。

❑src/main/java——项目Java源代码目录。

❑src/main/kotlin——项目Kotlin源代码目录。

❑src/main/resources——项目资源文件目录。

❑src/test/java——测试Java源代码目录。

❑src/test/kotlin——测试Kotlin源代码目录。

❑src/test/resources——测试资源文件目录。

许多框架使用了COC的思想,包括:Spring、Ruby on Rails、Kohana PHP、Grails、Grok、Zend Framework、CakePHP、Symfony、Maven、ASP.NET MVC、Web2py(MVC)、Apache Wicket等。COC是一个古老的思想理念,甚至在Java类库中也可以找出这一概念的踪迹。JavaBean规范中很多就是依赖这个理念。

例如,在知名的Java对象关系映射(ORM)框架Hibernate的早期版本中,将类及其属性映射到数据库上在XML文件中进行配置,而其中大部分信息都应能够按照约定得到,如将类映射到对应的数据库表,将类属性一一映射到表上的字段。在后续的版本中抛弃了这样的XML配置文件,而是采用Java类属性使用驼峰式命名对应数据库表中的下划线命名这个恰当的约定,大大简化了配置。而对于不符合这些约定的特殊情形,就使用Java注解来标注说明。

例如,Spring通过使用约定好的注解来标注Spring应用中各层中的Bean类:

❑@Component——标注一个普通的Spring Bean类。

❑@Controller——标注一个控制器组件类。

❑@Service——标注一个业务逻辑组件类。

❑@Repository——标注一个DAO组件类。

其实Java的成功,Spring的成功,XML的成功,Maven的成功等,都有其必然性,因为它们的设计理念都包含一个很简单但很深刻的道理——那就是“通用”。为什么通用?因为遵循约定。

提示

约定优于配置(Convention Over Configuration, COC)也称为按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。