关键词:
Spring 配置
序
人人都爱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></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
据说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">
<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配置文件说明
本项目示例基于spring boot 最新版本(2.1.9)实现,Spring Boot、Spring Cloud 学习示例...多数Spring Boot应用只需要很少的Spring配置。 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Sprin
添加依赖:在Spring Boot项目的pom.xml文件中加入spring-boot-starter-mail依赖,如果需要发送模板邮件,还可以加入Thymeleaf相关的依赖。 配置邮件:在application.properties或者application.yml中配置邮件发送的...
配置Redis连接:在application.properties或application.yml文件中配置Redis服务器的地址、端口以及其他相关参数,如密码、数据库索引等。 使用RedisTemplate:Spring Data Redis提供了一个名为RedisTemplate的类,...
代码生成器:MyBatis-Plus还提供了一个代码生成器,可以根据数据库表结构自动生成实体类、Mapper接口以及XML配置文件,这可以大幅减少手动编写这些代码的工作量。 综上所述,Spring Boot整合MyBatis-Plus作为数据层...
很不错的学习笔记,个人备用。Spring Boot:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。
spring-beans.jar(必须):这 个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI ...
文件中进行了详细介绍说明这个配置文件是典型XML格式但是它既冗长又不实用对于需要定义大量 Springbeans大工程来说我们难以阅读和管理它 在这篇文章里对于SpringXML配置我将向你展示12种比较好实战其中些实战不仅...
spring-1 演示了使用setter方式及构造器方式创建bean,util:list标签创建集合,p标签简化配置 和依赖注入, 以及bean的autowire和继承与依赖,以及bean的作用域。 spring-2 演示了外部配置文件的引入(connection)...
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...
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标签 ...
swagger-spring-boot-starter该项目主要利用Spring Boot的自动化配置特性来实现快速的将swagger2引入spring boot应用来生成API文档,简化原生使用swagger2的整合代码。 swagger-bootstrap-ui是springfox- swagger的...
简化Druid和HikariCp配置,提供变量参数配置。配置一次,并行通用。提供自定义数据源来源方案。提供项目启动后动态增加可移除数据源方案。提供Mybatis环境下的纯识读分离方案。提供使用spel动态参数解析数据源方案。...
spring-boot-starter-axon 简化使用的器。 您只需要将此库添加到您的 Spring Boot 项目中,就会为您注册 Axon 基础架构的合理默认配置。 对于每个 AggregateRoot,一个 EventSourcingRepository 将注册到应用程序上...
springCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置... SpringBoot旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能。
- chapter2-1-1:[配置文件详解:自定义属性、随机数、多环境配置等](http://blog.didispace.com/springbootproperties/) ### Web开发 - chapter3-1-1:[构建一个较为复杂的RESTful API以及单元测试]...
让你真正做到一行代码实现支付聚合,让你可以不用理解支付怎么对接,只需要专注你的业务 全能第三方支付对接pay-spring-boot-starter开发工具包 开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在简化...
项目设置常规设置父项目配置项目构建的以下方面: 共享资源从spring-data-build-resources依赖项(图像,CSS,JavaScript)中获取。 从src/asciidoc名为index.adoc Asciidoc文件中呈现参考文档。 在distribute概要文
:leaf_fluttering_in_wind: 适用于Amazon Web ...cloud-aws.gitcd spring-cloud-aws./mvnw package 要将jar生成并安装到本地Maven缓存中,请执行以下操作: ./mvnw install建筑文件可以通过激活Maven构建中的docs配置文