跟我学Spring3(12.1):零配置之概述,spring312.1
跟我学Spring3(12.1):零配置之概述,spring312.1
12.1 概述
12.1.1 什么是零配置
在SSH集成一章中大家注意到项目结构和包结构是不是很有规律,类库放到WEB-INF/lib文件夹下,jsp文件放到WEB-INF/jsp文件夹下,web.xml需要放到WEB-INF文件夹下等等,为什么要这么放呢?不这样放可以吗?
所谓零配置,并不是说一点配置都没有了,而是配置很少而已。通过约定来减少需要配置的数量,提高开发效率。
因此SSH集成时的项目结构和包结构完全是任意的,可以通过配置方式来指定位置,因此如web.xml完全可以不放在WEB-INF下边而通过如tomcat配置文件中新指定web.xml位置。
还有在SSH集成中还记得使用在Struts2配置文件中使用模式匹配通配符来定义action,只要我们的URL模式将类似于/{module}/{action}/{method}.action即可自动映射到相应的Action类的方法上,但如果你的URL不对肯定是映射不到的,这就是规约。
零配置并不是没有配置,而是通过约定来减少配置。那如何实现零配置呢?
12.1.2 零配置的实现方式
零配置实现主要有以下两种方式:
- 惯例优先原则:也称为约定大于配置或规约大于配置(convention over configuration),即通过约定代码结构或命名规范来减少配置数量,同样不会减少配置文件;即通过约定好默认规范来提高开发效率;如Struts2配置文件使用模式匹配通配符来定义action就是惯例优先原则。
- 基于注解的规约配置:通过在指定类上指定注解,通过注解约定其含义来减少配置数量,从而提高开发效率;如事务注解@Transaction是不是基于注解的规约,只有在指定的类或方法上使用该注解就表示其需要事务。
对惯例优先原则支持的有项目管理工具Maven,它约定了一套非常好的项目结构和一套合理的默认值来简化日常开发,作者比较喜欢使用Maven构建和管理项目;另外还有Strtus2的convention-plugin也提供了零配置支持等等。
大家还记得【7.5 集成Spring JDBC及最佳实践】时的80/20法则吗?零配置是不是同样很好的体现了这个法则,在日常开发中同样80%时间使用默认配置,而20%时间可能需要特定配置。
12.1.3 Spring3的零配置
Spring3中零配置的支持主要体现在Spring Web MVC框架的惯例优先原则和基于注解配置。
Spring Web MVC框架的惯例优先原则采用默认的命名规范来减少配置。
Spring基于注解的配置采用约定注解含义来减少配置,包括注解实现Bean配置、注解实现Bean定义和Java类替换配置文件三部分:
- 注解实现Bean依赖注入:通过注解方式替代基于XML配置中的依赖注入,如使用@Autowired注解来完成依赖注入。
- 注解实现Bean定义:通过注解方式进行Bean配置元数据定义,从而完全将Bean配置元数据从配置文件中移除。
- Java类替换配置文件:使用Java类来定义所有的Spring配置,完全消除XML配置文件。
本系列:
- 跟我学 Spring 3(1): Spring 概述
- 跟我学 Spring 3(2.1):IoC 基础
- 跟我学Spring3(2.2):IoC容器基本原理
- 跟我学Spring3(2.3):IoC容器基本原理
- 跟我学Spring3(3.1):DI的配置使用
- 跟我学Spring3(3.2):DI之循环依赖
- 跟我学Spring3(3.3):更多的DI知识
- 跟我学Spring3(3.4):DI之Bean的作用域
- 跟我学Spring3(4.1):资源之基础知识
- 跟我学Spring3(4.2):内置Resources实现
- 跟我学Spring3(4.3):访问Resource
- 跟我学Spring3(4.4):Resource通配符路径
- 跟我学Spring3(5.1 & 5.2):Spring表达式语言之概述和SpEL基础
- 跟我学Spring3(5.3):Spring 表达式语言之 SpEL 语法
- 跟我学Spring3(5.4):在Bean定义中使用EL—跟我学spring3
- 跟我学Spring3(6.1):AOP的HelloWorld
- 跟我学Spring3(6.3):基于Schema的AOP
- 跟我学Spring3(6.5):AspectJ切入点语法详解
- 跟我学Spring3(6.6): 通知参数
- 跟我学Spring3(6.7): 通知顺序
- 跟我学Spring3(6.8):切面实例化模型
- 跟我学Spring3(6.9):代理机制
- 跟我学Spring3( 7.1 ):对JDBC的支持之概述
- 跟我学Spring3( 7.2 ):对JDBC的支持之JDBC模板类
- 跟我学Spring3(7.3):对JDBC的支持之关系数据库操作对象化
- 跟我学Spring3(7.4):对JDBC的支持之Spring提供的其它帮助
- 跟我学Spring3(7.5):对JDBC的支持之集成Spring JDBC及最佳实践
- 跟我学Spring3(8.1):对ORM的支持之概述
- 跟我学Spring3(8.2):对ORM的支持之集成Hibernate3
- 跟我学Spring3(9.1):Spring的事务之数据库事务概述
- 跟我学Spring3(9.2):Spring的事务之事务管理器
- 跟我学Spring3(9.3):Spring的事务之编程式事务
- 跟我学Spring3(9.4):Spring的事务之声明式事务
- 跟我学Spring3(10.1):集成其它Web框架之概述
- 跟我学Spring3(10.2):集成其它Web框架之集成Struts1.x
- 跟我学Spring3(10.3):集成其它Web框架之集成Struts2.x
- 跟我学Spring3(10.4):集成其它Web框架之集成JSF
- 跟我学Spring3(11.1):SSH集成开发积分商城之概述
- 跟我学Spring3(11.2):SSH集成开发积分商城之实现通用层
- 跟我学Spring3(11.3):SSH集成开发积分商城之实现积分商城层
- 跟我学Spring3(12.1):零配置之概述
用户点评