Spring 总结XML配置的十二个最佳实践-Java基础-Java-编程开发

spring 基于 xml 配置的快速入门(超详细) Spring的出现是为了解决企业应用程序开发的复杂性 它是一个分层的、JavaSE/EE一站式、轻量级开源框架。 Spring框架是一个分层架构,它包含一系列的功能要素并被分为大约20个模块。这些模块分为Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和测试部分。 spring的两个核心是 ioc 和 aop; IoC(Inversion of Control 控制反转) 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

Spring是一个强大的JAVA应用框架,广泛地应用于JAVA的应用程序。为PlainOldJavaObjects(POJOs)提供企业级服务。Spring利用依赖注入机制来简化工作,同时提高易测性。Springbeans及依赖,以及beans类所需的服务都在配置文件中进行了详细的说明,这个配置文件是典型的XML格式。但是它既冗长又不实用。对于需要定义大量Springbeans的大工程来说,我们难以阅读和管理它。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接

作者:Jason;Li;evenbetter(作者的blog:http://blog.matrix.org.cn/page/evenbetter)

原文:http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html

译文:http://www.matrix.org.cn/resource/article/44/44236_Spring XML Configurations.html

关键字:Spring;XML;Configurations

在这篇文章里,对于SpringXML的配置,我将向你展示12种比较好的实践。其中的一些实践不仅是好的实践,更是必要的实践。除此以外,还有其他因素,例如领域模型的设计,都能影响XML的配置,但是这篇文章重点研究XML配置的易读性和易管理性。

1。不要使用autowiring

Spring可以通过类的自省来自动绑定其依赖部分,使得你不必明确指明bean的属性和构造器。Bean的属性可以通过属性名称或类型匹配来实现自动绑定。构造器通过类型匹配来实现自动绑定。你甚至可以指定自动检测自动绑定模式,它可以引导Spring选择一种适当的运行机制。先来看看下面的一个例子:

class="com.lizjason.spring.OrderService"
autowire="byName"/>

OrderService类的属性名在容器中用于匹配bean实例。自动绑定可以潜在地节省一些打字和减少一些混乱。但是在现实世界的工程里你不应该使用这种方式,这是因为它牺牲了配置的清晰性和可维护性。许多指南和介绍中大量吹捧自动绑定是Spring的一种极好的特征而没有提到这一特性所带来的牺牲。依我的观点,这就像Spring中的object-pooling,它更像是一种为了占据更多市场的商业特征。它对于XML配置文件的小巧化是一个好办法,但实际上也增加了复杂程度,尤其当你运行有大量类声明的工程时。虽然Spring允许你混合自动绑定和手动绑定,但是这个矛盾会使XML配置更加晦涩难懂。

2.使用通俗的命名

这个方式对于Java编码也一样适用。在工程中使用清晰的、描述性的、协调的通俗名称对于开发者理解XML配置是十分有益的。例如对于beanID,你可以根据通俗的Java类名来命名它。对于例子中OrderServiceDAO的beanID命名为orderServiceDAO。对于大的工程,你可以在beanID前面加上包名作为前缀。

3.使用简洁的形式

简洁形式避免了冗长,是因为它从子元素中将属性值和参考写到属性中。例如下面的例子:

class="com.lizjason.spring.OrderService">
lizjason

可以使用简洁形式将上述代码重写为:

class="com.lizjason.spring.OrderService">

简洁形式功能在1.2版本中可以使用。对于 没有简洁形式。

简洁形式不但可以节约你的打字,而且可以使XML配置文件清晰。它最引人注目的是当在一个配置文件中有大量定义的类时可以提高易读性。

4.对于构造器参数匹配,类型名比序号好。

当一个构造器含有一个以上的同种类型的参数,或者属性值的标签已经被占用时,Spring允许你使用从0计数的序号来解决这些会带来混淆的问题。例如:

class="com.lizjason.spring.BillingService">

像下面这样,利用类型属性来编写会更好一些:

class="com.lizjason.spring.BillingService">
value="lizjason"/>

使用索引可以稍稍减少一些冗长,但是和使用类型属性相比,它还是有容易发生错误的倾向和难于阅读的缺点。你应该只在构造器参数不明确的时候,才使用索引这一方法。

5.尽可能重用已定义过的bean

Spring提供一种类似继承一样的机制来减少配置信息的复制并简化XML配置。定义一个子类可以从它父类那里继承配置信息,而父类实质上作为子类的一个模板。这就是大工程中所谓的重用。你所需要做的就是在父类bean中设置abstract=true,然后在子bean注明它自己的父类bean。例如:

class="com.lizjason.spring.AbstractService">
parent="abstractService"
class="com.lizjason.spring.ShippingService">

ShippingService类从abstractService类那里继承companyName属性的值??lizjason。如果你没有为一个bean指明类或factory方法,那么这个bean便是抽象的。

6.尽量使用ApplicationContext来装配定义的bean

像在Ant脚本中的引用一样,Spring的引用对于装配模块化的bean来说是很有用的。例如:

class="com.lizjason.spring.OrderService"/>

相对于使用import在XML配置中来预装配,通过ApplicationContext来配置这些beans,显得更加灵活。利用ApplicationContext也使得XML配置易于管理。你可以像下面的例子那样在ApplictionContext构造器里布置bean:

String[]serviceResources=
{"orderServices.xml",
"billingServices.xml",
"shippingServices.xml"};
ApplicationContextorderServiceContext=new
ClassPathXmlApplicationContext(serviceResources);

7.利用id作为bean的标识符

你可以指定一个id或名称来作为bean的标识符。虽然使用id不会提高易读性,但是它可以让XMLparser对bean的引用有效方面进行更好的验证。如果由于XMLIDREF的限制而不能使用某个id,你可以利用names来作为bean的标识符。XMLIDREF的限制是id必须以字母开头(或者在XML规范中定义的标点符号),后面接着字母,数字,连字号,下划线,冒号等。实际上,遇到XMLIDREF限制的问题是很少见的。

8.在开发阶段使用依赖检验

你可以在bean中给依赖检验的属性设置值,而不采用原先默认的空值,属性设置例如simple,object或all,以便容器进行依赖检验。当bean的全部的属性(或某类属性)需要被明确设置或自动绑定时,依赖检验便显得很有用。

class="com.lizjason.spring.OrderService"
dependency-check="objects">

在这个例子里,容器确保为orderServicebean设置的属性不是primitives或者collections。为所有的bean设置默认依赖检测也是可以的,但是我们很少这样做,是因为有些bean的属性根本就不必设置。

9.为每个配置文件加上一个headercomment

最好使用descriptiveid和名称来代替在XML配置文件中的注释。此外,加上一个配置文件header也很有用处,它可以概述文件中所定义的bean。你可以选择将描述内容加入description标签中。例如:

Thisfiledefinesbillingservice
relatedbeansanditdependson
baseServices.xml,whichprovides
servicebeantemplates...

...

使用description标签的一个好处是可以容易地利用工具从标签中选取出description(的内容)。

10.对于任何变化,要与队友积极交流

当你重构Java代码时,你需要随时更新配置文件并且通知队友。XML配置文件也是代码,它们是应用程序的至关重要的部分,但是它们难于阅读和维护。大部分时间你既要阅读XML配置文件又要阅读运行中的Java代码。

11.Setterinjection优于constructorinjection

Spring提供3种类型的依赖注入:constructorinjection,setterinjection,和methodinjection。我们一般只用前两种类型。

class="com.lizjason.spring.OrderService">

class="com.lizjason.spring.BillingService">

这个例子中,orderService类使用的是constructorinjection,而BillingService类使用的是setterinjection。constructorinjection可以确保bean不会在一个非法状态下被创建,但是setterinjection更加灵活并且更易管理,尤其当类存在很多属性并且其中一些是可选的情况下。

12.不要滥用依赖注入

作为最后一点,SpringApplicationContext可以替你创建Java对象,但是并不是所有的Java对象都通过依赖注入来创建的。例如,全局的对象不应该通过ApplicationContext来创建。Spring是一个很棒的框架,但是,就易读性和易管理性而言,当定义大量bean的时候,基于XML的配置问题就会突出。过度的依赖注入会使XML配置变得复杂而且臃肿。记住!使用强大的IDE时,例如Eclipse和IntelliJ,与XML文件相比,Java代码更加易读,易维护,易管理。

总结

对于Spring的配置,XML是很优秀的方式。但当定义大量bean时,基于XML配置会变得冗长,笨拙。Spring提供了丰富的配置选项。适当地利用其中的选项可以使XML配置清晰,但是,有些选项,例如autowiring(自动绑定),往往会降低易读性和易维护性。文章中所列举的实例,可以帮助你创建出清晰易读的XML配置文件。

从零构建知识图谱:本体工程与知识建模实战指南 本文是一份从零构建知识图谱的实战指南,重点阐述了知识建模与本体工程的核心地位。文章详细介绍了如何使用Protégé工具进行本体设计,包括定义领域、复用现有本体、构建类层次与属性约束,并讲解了如何利用D2RQ工具将关系数据库数据转换为RDF三元组,最终通过Apache Jena Fuseki搭建SPARQL端点进行知识查询与推理,让知识图谱真正“活”起来。 阅读详情

相关推荐

深入解析国家企业征信系统瑞数6vmp算法逆向实战

本文深入解析了国家企业征信系统所采用的双层防护机制,重点聚焦于瑞数6代vmp算法的逆向实战。文章详细拆解了从加速乐521状态码的绕过,到瑞数412挑战的核心算法还原过程,提供了通过动态Hook、日志分析进行算法逆向,并用Python实现自动化请求链的完整技术方案,旨在为安全研究与技术学习提供参考。

yellow的专栏 613

Spring入门总结(五)@Order注解

有的时候,我们希望应用Autowired注解的时候数组有序,于是就有了@Order注解 下面看一个案例: 一个接口: package multibean; public interface BeanInterface { } 接口实现类一: package multibean; import org.springframework.core.annotation.Order;...

乌云踏雪 1万+

Vivado加上VsCode让你的生活更美好

VsCode与Vivado的灵活使用 引言 ​ 现在大二了,在接触硬件描述语言。Vivado自带的编辑器实在很难用,为了能够“极客”一些,当然是去Google了一下有哪些方法可以取而代之。 ​ 网络上的答案大同小异,基本上都是用的Sublime Text.(我的学长们也几乎都是) 平时码代码的过程中,我习惯与使用VsCode,尤其是在微软收购GitHub之后,Code 简直就是神器了。于是乎…一个...

qq_39498701的博客 10万+

Spring基础(XML配置形式)

主要是为了降低程序的耦合度,在之前书写 JavaWeb 项目的时候,我们经常需要自己手动 new 一个 service 对象的实现类等等操作,这会提高代码的耦合度,在大型项目中这是不利于我们维护项目的。Spring 中引入 IoC 控制反转的概念,简单来讲就是不用手动 new 具体的实现类对象,Spring 会有一个称为 IoC 容器的东西,帮我们维护这这些实例对象,当我们需要使用的时候,Spring 将这个示例对象直接给我们即可。

小王同学的博客 466

xhs私信协议分析

之前分析过xhs的shield算法,今天再聊聊xhs的私信,文章仅供学习参考研究交流,如有侵权请联系删帖。经过抓包分析发现私信接口并不是走的http协议,而是socket协议。而要获取socket包则需要使用wireshark软件1、protobuf的包体中的序号7,多次验证后发现文字信息的需要需要固定成12、protobuf的包体中的序号12,多次验证后发现文字信息的需要需要固定成1后续有时间的话,再研究一下视频和图片格式的私信协议,这次就分析到这里吧。

佛系更新... 3489

YOLOv11改进 | 注意力篇 | YOLOv11引入CA注意力机制

摘要:最近关于移动网络设计的研究已经证明了通道注意力(例如,挤压和激励注意力)对于提升模型性能的显着有效性,但它们通常忽略了位置信息,而位置信息对于生成空间选择性注意力图很重要。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~3.2 在Extramodule里创建CA。在CA.py文件里添加给出的CA代码。

tsg6698的博客 2981

Spring的xml文档配置

1 2注解的context名称空间 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context

Dylan6868的博客 4142

汽车安全新防线|基于AI的入侵检测系统开发(全网独家复现),CNN-BiLSTM融合改进篇 强化CAN总线数据感知、助力多类型入侵检测、实时响应预警、车载场景有效落地

基于AI的入侵检测系统是汽车网络安全领域的重要技术突破,能够有效应对日益复杂的网络攻击威胁。随着AI技术的不断发展和普及,AI入侵检测系统将在汽车安全领域发挥越来越重要的作用。对于汽车制造商和供应商来说,实施AI入侵检测系统不仅是保障车辆安全的需要,也是提升市场竞争力的重要手段。未来,AI入侵检测系统将成为智能汽车的标准配置,为用户提供更加安全、可靠的驾驶体验。

getusushu的博客 86

Spring XML配置文件详解

​ spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Spring框架的配置文件是基于xml的,Spring强大的功能依赖于类型繁多的配置项,这些配置项纷繁复杂难以记忆,下面将常用的配置项示例记录下来,以备后续查看使用。 一、Spring配置文件示例 <?xml version="1.0" encoding="UTF-8"?&...

算云烟 3万+

优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信

优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信今天开始会陆续介绍一些优秀的开源项目,项目基本都是和FPGA或HDL相关的。对于一些找工作或者急需项目经验的人来说,这些项目...

OpenFPGA的博客 8120

番外篇 | 关于YOLO11算法的改进点总结

关于YOLO11算法的改进点总结。🌈

小哥谈 2314

Spring中XML配置文件的十二个最佳方法

Spring中XML配置文件的十二个最佳方法 本文介绍Spring中XML配置文件的十二个最佳方法,包括使用简洁形式,使用命名约定,为每个配置文件添加首部注释,Setter注入优于构造函数注入等。   1。避免使用自动绑定(autowiring)功能 Spring 可以通过bean类的自省自动绑定依赖性,所以不必显式指明bean的属性和构造函数。Bean属性可以通过属性名称或类型匹

风清云淡的专栏 4455

Unity GameObject 核心机制深度解析:从底层结构到工程实践

从底层机制讲透 Unity GameObject:托管壳加原生芯的双层对象模型如何制造假 null 陷阱、Transform 层级与组件通信的原理、生命周期回调的确切顺序。文章同时给出 Instantiate 成本分析与对象池等高频场景的工程实践。

游戏人生 40

Spring XML配置十二个最佳实践

在这篇文章里,对于Spring XML的配置,我将向你展示12种比较好的实践。其中的一些实践不仅是好的实践,更是必要的实践。除此以外,还有其他因素,例如领域模型的设计,都能影响XML的配置,但是这篇文章重点研究XML配置的易读性和易管理性。  1。不要使用autowiring  Spring可以通过类的自省来自动绑定其依赖部分,使得你不必明确指明bean的属性和构造器。Bean的属性可以通

走向架构师之路 1109

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring系列二:基于XML配置bean 上

Spring系列二: 基于注解配置bean

你好, 我在学java的博客 3535

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【JAVA】配置 Spring(XML, 注解, Java 配置)

配置 Spring(XML, 注解, Java 配置)

weixin_37559642的博客 1498

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring XML 配置中 `<import>` 标签的解析机制与最佳实践

Spring XML配置中<import>标签解析机制与最佳实践 摘要:Spring的<import>标签是实现配置模块化的关键工具,允许将Bean定义分散到多个文件并在主配置中统一引入。解析流程包括:获取资源路径、解析占位符、判断路径类型(绝对/相对)、递归加载资源。常见问题包括资源找不到、循环导入、占位符未解析等,可通过使用绝对路径、重构配置结构、配置占位符处理器等方式解决。最佳实践建议优先使用classpath:前缀、按功能模块组织配置、避免深层嵌套import,并利用占位符实

刘一说的IT专栏 2240

Spring配置方式演进:从XML到注解,构建灵活高效的开发体系

Spring当中常见的xml与注解进行对比

2301_77129242的博客 1020

Spring XML配置的十二个最佳实践

 Spring是一个强大的Java应用框架,它广泛地应用于Java应用程序中,为Plain Old Java Objects(POJO)提供企业级服务。Spring利用依赖注入机制来简化工作,同时提高可测试性。其配置文件(通常是XML格式)中指定了Spring bean、依赖性以及bean所需的服务。但是,这些XML配置文件既冗长又不实用。对于需要定义大量Spring bean的大型项目来

我的世界我的梦 2671

spring配置:xml配置和java注解配置对比

虽然spring早就推出java注解的方式配置框架,由于习惯了看xml所以一直没有去学习,然而最近需要学习springboot,为了平滑过渡,先被迫研究一下注解配置方式。 这里展示3种spring配置文件,来对比xml配置和java注解配置的区别,分别是spring\mvc\shiro的配置 先说总结: 对比2种配置方式会发现xml方法更繁琐(xml那恶心的头部约束),拿shiro来说...

圣域杂兵的博客 7958

Java面试必备:Spring Boot是否可以使用XML配置?

Spring Boot以其"约定优于配置"的理念广受欢迎,它极大地简化了Spring应用的初始搭建和开发过程。默认情况下,Spring Boot鼓励使用Java配置和注解,但很多开发者仍然好奇:在Spring Boot中是否可以使用传统的XML配置?本文将深入探讨这个问题。

qq_58299462的博客 918

Spring XML 配置

使用。

yuren_xia的博客 1538

从XML到Java Config:metrics-spring配置方式对比与最佳实践

metrics-spring模块将Dropwizard Metrics库与Spring框架集成,提供了XML和Java两种配置方式,帮助开发者轻松实现应用性能指标的收集与监控。本文将深入对比这两种配置方式的优缺点,并分享实际项目中的最佳实践。 ## 📚 两种配置方式概述 metrics-spring自3.0版本起同时支持XML和Java Config两种配置方式,开发者可根据项目需求和个人偏

gitblog_00753的博客 498
上一篇: 使用Java API压缩和解压缩数据-Java基础-Java-编程开发
下一篇: 用java绘制google中文名称“谷歌”-Java基础-Java-编程开发
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值