`
CobWeb
  • 浏览: 40048 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

(转)简化Spring(1)--配置文件

阅读更多
序     人人都爱Spring加Hibernate。
    但Spring MVC+hibernate的Sample如Appfuse的代码却算不得最简洁优美好读,如果在自己的项目中继续发挥我们最擅长的依样画葫芦大法,美好愿望未必会实现。
     所以,Pramatic精神不灭。这个系列就是探寻最适合自己的Spring+Hibernate模式。
    
                              I-配置文件简化
     我厌倦一切配置文件繁重的框架。
     最好的情况是,框架提供极端灵活复杂的配置方式,但只在你需要的时候。
­
     Spring提供了三种可能来简化XML。随着国内用户水平的提高,这些基本的简化技巧大家都已掌握。
     大家可以直接看第3,第4点--Spring 1.2, Spring 2.0的后继改进。
­
1.1.autowire="byName" /"byType"
     假设Controller有一个属性名为customerDAO,Spring就会在配置文件里查找有没有名字为CustomerDAO的bean, 自动为Controller注入。
     如果bean有两个属性,一个想默认注入,一个想自定义,只要设定了autowire,然后显式的声明那个想自定义的,就可以达到要求。这就应了需求,在需要特别配置的时候就提供配置,否则给我一个默认注入。
­
     还有一个更懒的地方,在最最根部的<beans>节点写一句default-autovwrie="byName",可以让文件里的所有bean 都默认autowrie。
    不过Rod认为开发期可以这样,但Production Server上不应该使用Autowire。而我觉得那些自定义一次的地方比如TranscationManager应该详细定义,而Dao,Controller这种大量重复定义的bean就可以偷点懒了。
1.2.<bean>节点之间抽象公共定义和 Inner Bean
    这太方便懒人了,想不到两个独立的XML节点都可以玩继承和派生,子节点拥有父节点的全部属性。
    最好用的地方就是那个Transtion Proxy的定义。先定义一个又长又冗的父类,然后用子类去继承它。
  
    另外,还有一个Inner Bean的机制,可以把DAO写成Proxy的内部类。为什么要写成内部类?为了让Proxy冒名顶替它去让Controller Autowire。(详见后面的示例)
1.3. 宽松的配置, To XML or Not to XML
    据说Spring比Struts的配置宽松了很多,这就给人把东西从配置文件中撤回原码中的机会。
    不赞成什么都往配置文件里晒,造成了Rich Information的配置文件,修改或者查看的时候,要同时打开配置文件和原码才能清楚一切。
    而我希望配置文件就集中做一些整体的配置,还有框架必须的、无需管理的冗余代码。而一些细节的变化不大的配置和逻辑,就尽量别往里塞了。因此,Success/Fail View 的配置,不建议放在里面。
­
2.简化后的配置文件
1.Controller只剩下一句
<bean name="customerController" class="org.springside.bookstore.web.CustomerController" autowire="byName"/>
­
2.DAO也只剩一句
<bean id="customerDAO" class="org.springside.bookstore.dao.CustomerDao"/>
3.Service类只剩下5行
  <bean id="customerManager" parent="baseTxService">
        <property name="target">
            <bean class="org.springside.bookstore.service.CustomerManager"/>
        </property>
    </bean>
3.Spring 1.2后xml语法简化
­
最主要的简化是把属性值和引用bean从子节点变回了属性值,对不喜欢autowire的兄弟比较有用。
当然,如果value要CDATA的时候还是要用子节点。另外,list的值可以用空格隔开也比较实用。
­
1.属性值
­
  <property name="foo">
     <value>fooValue</value>
  </property>
  简化为
  <property name="foo" value="fooValue"/>
­
2.引用 bean
<property name="foo">
   <ref bean="fooBean">
</property>
简化为
<property name="foo" ref="fooBean"/>
­
­
3. list可以简化为空格分开的字符串  <property name="myFriendList">
  <list>
     <value>gigix</value>
        <value>wuyu</value>
  </list>
</property>
简化为
<property name="myFriendList" value="gigix wuyu"/>

  
  
4.Spring 2.0来了
   如果没什么外力刺激,spring xml 可能就这样不会变了。但现在xml成了过街老鼠,被ror的默认配置和JDK5的annotation逼得不行,当然就要继续求变。
   比如有好事者认为,节点名必须以bean打头,附加一个属性id来表示bean名;属性值必须搞一个property子节点,子节点上有个属性name来表示属性名,是给机器看的很不直观的东西。 <bean id="customerDAO" class="org.springside...CustomerDAO">
<property name="maxCount" value="10">
</bean>
­
给人看的东西应该就写成 <customerDAO class="org.springside....CustomerDAO" maxCount="10"/>
­
Spring 2.0正用schema实现类似的语法,具体请看它的JPetStore sample。
­
­
5.使用Spring自带的DTD使编辑器Smart.
    如果没有用Eclipse的Spring插件,那至少也要使用spring自带的dtd使XML编辑器smart一些,能够自动为你生成属性,判断节点/属性名称有没有拼错等。
­
6.还有更变态的简化配置方法
    比如autoproxy,不过我觉得更简化就不可控了,所以没有采用。
分享到:
评论

相关推荐

    xbean简化spring配置文件.doc

    利用xbean简化spring配置文件说明

    spring-boot示例项目

    本项目示例基于spring boot 最新版本(2.1.9)实现,Spring Boot、Spring Cloud 学习示例...多数Spring Boot应用只需要很少的Spring配置。 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Sprin

    spring-boot-邮件发送

    添加依赖:在Spring Boot项目的pom.xml文件中加入spring-boot-starter-mail依赖,如果需要发送模板邮件,还可以加入Thymeleaf相关的依赖。 配置邮件:在application.properties或者application.yml中配置邮件发送的...

    spring配置文件:整理总结Spring中XML配

    文件中进行了详细介绍说明这个配置文件是典型XML格式但是它既冗长又不实用对于需要定义大量 Springbeans大工程来说我们难以阅读和管理它  在这篇文章里对于SpringXML配置我将向你展示12种比较好实战其中些实战不仅...

    spring-boot-整合redis

    配置Redis连接:在application.properties或application.yml文件中配置Redis服务器的地址、端口以及其他相关参数,如密码、数据库索引等。 使用RedisTemplate:Spring Data Redis提供了一个名为RedisTemplate的类,...

    spring-boot-mybatis-plus数据层框架

    代码生成器:MyBatis-Plus还提供了一个代码生成器,可以根据数据库表结构自动生成实体类、Mapper接口以及XML配置文件,这可以大幅减少手动编写这些代码的工作量。 综上所述,Spring Boot整合MyBatis-Plus作为数据层...

    Spring Boot的自动化配置实现swagger2引入spring boot生成API文档.docx

    swagger-spring-boot-starter该项目主要利用Spring Boot的自动化配置特性来实现快速的将swagger2引入spring boot应用来生成API文档,简化原生使用swagger2的整合代码。 swagger-bootstrap-ui是springfox- swagger的...

    springboot学习思维笔记.xmind

    SpringBoot的配置文件 application.properties application.yml src/main/resources starter pom 官方starter pom spring-boot-starter spring-boot-starter-actuator spring-...

    spring4.3.9相关jar包

    spring-beans.jar(必须):这 个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI ...

    spring4示例代码

    spring-1 演示了使用setter方式及构造器方式创建bean,util:list标签创建集合,p标签简化配置 和依赖注入, 以及bean的autowire和继承与依赖,以及bean的作用域。 spring-2 演示了外部配置文件的引入(connection)...

    spring boot 全面的样例代码

    - chapter2-1-1:[配置文件详解:自定义属性、随机数、多环境配置等](http://blog.didispace.com/springbootproperties/) ### Web开发 - chapter3-1-1:[构建一个较为复杂的RESTful API以及单元测试]...

    基于Spring-Boot和Spring-Cloud实现微服务架构学习(一).doc

    很不错的学习笔记,个人备用。Spring Boot:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。

    spring-boot-Thymeleaf 模板

    Spring Boot Thymeleaf提供了一个便捷的方式来在Spring Boot应用程序中使用Thymeleaf模板引擎,简化了开发过程,并提供了丰富的功能和灵活的配置选项。Spring Boot Thymeleaf提供了一个便捷的方式来在Spring Boot...

    Spring Boot是一个基于Spring框架的开源项目,旨在简化Spring应用的初始搭建以及开发过程 以下是对Spring

    Spring Boot是一个基于Spring框架的开源项目,旨在简化Spring应用的初始搭建以及开发过程。以下是对Spring Boot的500字资源介绍: Spring Boot是一款快速、轻便的Java开发框架,它为Spring应用提供了更加简化的开发...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 ...

    基于spring boot的spring cloud 开源框架

    springCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置... SpringBoot旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能。

    Spring Boot应用开发框架项目旨在简化创建产品级的Spring应用和服务.rar

    配置外部化:支持多种配置文件格式,简化应用程序配置的修改和管理。 2. 快速入门:使用Spring Boot创建一个简单的RESTful API 本节将演示如何使用Spring Boot创建一个简单的RESTful API。我们将使用Spring ...

    spring-boot-starter-axon:Axonframework 的 Spring Boot 启动模块

    spring-boot-starter-axon 简化使用的器。 您只需要将此库添加到您的 Spring Boot 项目中,就会为您注册 Axon 基础架构的合理默认配置。 对于每个 AggregateRoot,一个 EventSourcingRepository 将注册到应用程序上...

    dynamic-datasource-spring-boot-starter:springboot的动态数据源多数据源动态数据源主从分离读写分离分布式事务https:dynamic-datasource.com

    简化Druid和HikariCp配置,提供变量参数配置。配置一次,并行通用。提供自定义数据源来源方案。提供项目启动后动态增加可移除数据源方案。提供Mybatis环境下的纯识读分离方案。提供使用spel动态参数解析数据源方案。...

    Spring入门案例-入门案例制作

    编写Spring核心配置文件spring.xml 在程序中读取Spring 配置文件,通过Spring框架获得Bean,完成相应的操作 在上面是我们的开发流程,我们第一步一般都是导入所需jar包,但由于刚开始时根本不知道该在什么时候用到...

Global site tag (gtag.js) - Google Analytics