`
逆风的香1314
  • 浏览: 1391987 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简化Spring--配置文件1

阅读更多

 

关键词Spring    配置                                          

 

                              

 

    人人都爱SpringHibernate
    
Spring MVC+hibernateSampleAppfuse的代码却算不得最简洁优美好读,如果在自己的项目中继续发挥我们最擅长的依样画葫芦大法,美好愿望未必会实现。
    
所以,Pramatic精神不灭。这个系列就是探寻最适合自己的Spring+Hibernate模式。
                                  I-
配置文件简化

 

     我厌倦一切配置文件繁重的框架。
    
最好的情况是,框架提供极端灵活复杂的配置方式,但只在你需要的时候
      Spring
提供了三种可能来简化XML。随着国内用户水平的提高,这些基本的简化技巧大家都已掌握。
     
大家可以直接看第3,第4--Spring 1.2, Spring 2.0的后继改进。

 

1.1.autowire="byName" /"byType"

 

     假设Controller有一个属性名为customerDAOSpring就会在配置文件里查找有没有名字为CustomerDAObean, 自动为Controller注入。
     
如果bean有两个属性,一个想默认注入,一个想自定义,只要设定了autowire,然后显式的声明那个想自定义的,就可以达到要求。这就应了需求,在需要特别配置的时候就提供配置,否则给我一个默认注入。
    
还有一个更懒的地方,在最最根部的<beans></beans>节点写一句default-autovwrie="byName",可以让文件里的所有bean 都默认autowrie
   
不过Rod认为开发期可以这样,但Production Server上不应该使用Autowire。而我觉得那些自定义一次的地方比如TranscationManager应该详细定义,而Dao,Controller这种大量重复定义的bean就可以偷点懒了。

 

1.2.<bean></bean>节点之间抽象公共定义和 Inner Bean

 

    这太方便懒人了,想不到两个独立的XML节点都可以玩继承和派生,子节点拥有父节点的全部属性。
   
最好用的地方就是那个Transtion Proxy的定义。先定义一个又长又冗的父类,然后用子类去继承它。
      
另外,还有一个Inner Bean的机制,可以把DAO写成Proxy的内部类。为什么要写成内部类?为了让Proxy冒名顶替它去让Controller Autowire(详见后面的示例)

 

1.3. 宽松的配置, To XML or Not to XML 
    据说SpringStruts的配置宽松了很多,这就给人把东西从配置文件中撤回原码中的机会。
   
不赞成什么都往配置文件里晒,造成了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.2xml语法简化
 
最主要的简化是把属性值和引用bean子节点变回了属性值,对不喜欢autowire的兄弟比较有用。
 
当然,如果valueCDATA的时候还是要用子节点。另外,list的值可以用空格隔开也比较实用。

 

1.属性值

 

  <property name="foo">
<shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"></shapetype><stroke joinstyle="miter"></stroke> <formulas> </formulas> <f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f> <lock v:ext="edit" aspectratio="t"></lock><shape id="_x0000_i1025" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>     
<value>fooValuevalue>
  property>
  简化为
  <property name="foo" value="fooValue"/><shape id="_x0000_i1026" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape> <imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>

 

2.引用 bean

 

<shape id="_x0000_i1027" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata><property name="foo">
<shape id="_x0000_i1028" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>   
<ref bean="fooBean">
<shape id="_x0000_i1029" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>
property>
<shape id="_x0000_i1030" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>
简化为
<shape id="_x0000_i1031" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>
<property name="foo" ref="fooBean"/>

 

3. list可以简化为空格分开的字符串

 

<shape id="_x0000_i1032" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata><property name="myFriendList">
<shape id="_x0000_i1033" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>  
<list>
<shape id="_x0000_i1034" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>     
<value>gigixvalue>
        <value>wuyuvalue>
<shape id="_x0000_i1035" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>  
list>
<shape id="_x0000_i1036" type="#_x0000_t75" alt="" style="WIDTH: 8.25pt; HEIGHT: 12pt"></shape><imagedata o:href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></imagedata>
property

分享到:
评论

相关推荐

    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-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和Spring-Cloud实现微服务架构学习(一).doc

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

    spring4.3.9相关jar包

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

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

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

    spring4示例代码

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

    springboot学习思维笔记.xmind

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

    spring-boot-Thymeleaf 模板

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

    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的自动化配置实现swagger2引入spring boot生成API文档.docx

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

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

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

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

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

    基于spring boot的spring cloud 开源框架

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

    spring boot 全面的样例代码

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

    基于spring-boot实现自动化配置的支付对接.zip

    让你真正做到一行代码实现支付聚合,让你可以不用理解支付怎么对接,只需要专注你的业务 全能第三方支付对接pay-spring-boot-starter开发工具包 开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在简化...

    spring-data-build:用于集中Spring Data Maven构建的公共资源和配置的模块

    项目设置常规设置父项目配置项目构建的以下方面: 共享资源从spring-data-build-resources依赖项(图像,CSS,JavaScript)中获取。 从src/asciidoc名为index.adoc Asciidoc文件中呈现参考文档。 在distribute概要文

    spring-cloud-aws:Spring Cloud AWS的新家

    :leaf_fluttering_in_wind: 适用于Amazon Web ...cloud-aws.gitcd spring-cloud-aws./mvnw package 要将jar生成并安装到本地Maven缓存中,请执行以下操作: ./mvnw install建筑文件可以通过激活Maven构建中的docs配置文

Global site tag (gtag.js) - Google Analytics