从回帖的反应来看,大多数人还是不赞成完全代替XML的,这点倒是在意料之中。我个人还是倾向于用代码来取代XML的Bean定义,当然这更多的是关乎个人偏好,不代表与我观点不同的人就是错的。


先来说说代码相对于XML的优点吧:



   1. 更加简洁,相对于XML的“语法”,java来得更熟悉

   2. 类型安全,更大程度上发挥java静态语言的特性

   3. 对重构更加友好



再说说用annotation代替XML的可能性吧,目前看来是不大可能,主要还存在以下的限制:



1. java的语言文化



不知道还有哪门语言比java更加依赖XML,尤其是做web开发。在JDK5之前,没有annotation的时代,用XML来记录一些补充语义,似乎也没有比这更理想的方案。这些年用着用着大家就习惯了,于是不再有人去质疑。回头看看平时使用的各种大大小小的框架,除了Bob Lee开发的google guice,没有哪个从最初的设计开始就抛开XML的,在java主流文化的影响下拿出这么“非主流”的作品,难怪他自称crazybob。好在这些情况在慢慢好转,annotation以及CoC等观念被越来越多的人接受。



2. spring本身的限制



spring2.0开始引入的schema与namespace大大简化了XML
Bean的定义,比如<tx:annotation-driven
/>,简单一行就开启了用annotation来配置事务的功能(还记得spring1.x的时候需要多少行来配置事务吗?)。换做用
@Configuration要如何实现?这个时候只能深入spring的细节,找出<tx:annotation-driven
/>注册的所有bean,一个一个地在AppConfig.java中手工定义。我之前想过写一个插件来解决这个问题,即通过代码定义一个简单的bean就可以实现namespace这样的功能。后来在spring的jira上发现了spring3.1即将提供这样的支持,在基于java的配置中增加以下高级配置的功能:



    * Enabling annotation-driven transaction management (<tx:annotation-driven/>)

    * Enabling annotation-driven scheduling (<task:annotation-driven/>)

    * Enabling AspectJ auto-proxying (<aop:aspectj-autoproxy)

    * Enabling domain object DI with @Configurable (<aop:spring-configured/>)

    * Enabling property-placeholder replacement (<context:property-placeholder/>)

    * Enabling AspectJ load-time weaving (<context:load-time-weaver/>)

    * Enabling MBean Export (<context:mbean-export/>)

    * Enabling component scanning (<context:component-scan/>)

    * Performing JNDI lookups (<jee:jndi-lookup/>)

    * Looking up local and remote stateless session beans (<jee:local-slsb/>; <jee:remote-slsb/>)



所以这个问题在未来的版本中也会得到解决



总结:所以我觉得java-based configuration会是一个趋势。说来惭愧,像python, ruby等语言不早就这么做了吗?看看django, rails,里面的配置不都是用自己的语言来写吗?大家都玩得这么High,java怎么能缺席呢?

spring3.0使用annotation完全代替XML(续)的更多相关文章

  1. spring3.0使用annotation完全代替XML(三)

    很久之前写过两篇博客: spring3.0使用annotation完全代替XML spring3.0使用annotation完全代替XML(续) 用java config来代替XML,当时还遗留下一些 ...

  2. spring3.0使用annotation完全代替XML

    @Service与@Component有什么不同?那天被问到这个问题,一时之间却想不起来,就利用这篇文章来纪录spring3.0中常用的annotation. 从spring2.5开始,annotat ...

  3. Spring3.0 入门进阶(三):基于XML方式的AOP使用

    AOP是一个比较通用的概念,主要关注的内容用一句话来说就是"如何使用一个对象代理另外一个对象",不同的框架会有不同的实现,Aspectj 是在编译期就绑定了代理对象与被代理对象的关 ...

  4. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  5. 开发基础框架:mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3

    一:项目下载地址(点击 Source code(zip)) https://github.com/fzxblgong/frame_2014-12-15/releases 版本:v1.2大小:20M 二 ...

  6. MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

    新建web project: 命名为SSH,做如下设置: 新建后的工程目录如下: 然后开始添加SSH框架,这里我按照struts-spring-hibernate顺序进行添加. 首先添加struts2 ...

  7. 模块化之Spring3.0 web fragment和gradle构建项目

      1.背景 模块化开发很久以前就开始普及的概念.但是到了企业实际情况中,真正把模块化作为系统架构的核心的不多.或者说对模块化有这个意识,但是具体到底该如何实现,有些模糊,同时也许因为项目紧.任务中. ...

  8. Spring3.0之后->Spring MVC过滤器-HiddenHttpMethodFilter

    浏览器form表单只支持GET与POST请求,而DELETE.PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET.POST.PUT ...

  9. spring3.0结合Redis在项目中的运用

    推荐一个程序员的论坛网站:http://ourcoders.com/home/ 以下内容使用到的技术有:Redis缓存.SpringMVC.Maven.项目中使用了redis缓存,目的是在业务场景中, ...

随机推荐

  1. JAVA基础学习——1.0 Java概述

    Java语言 SUN公司  1995年推出的高级编程语言 ■  主要应用方向 Web开发和Android开发 ■  主要特点 平台无关性:能运行于不同的平台上    安全性:去掉了指针操作,内存由操作 ...

  2. Storyboard & XIB 自己的理解

    //1.storyboard //(1) //此处bundle:nil 等价于 [NSBundle mainBundle] //    SecondViewController *secondVc = ...

  3. IE11兼容性问题修改

    最近测试给了我一大堆BUG,一瞅发现全是IE11的.吐槽一下这个浏览器真的比较特立独行.很多默认的样式跟别的浏览器不同,而且最明显的一点应该是padding左右内边距往往比别的浏览器大了一倍.但是当需 ...

  4. 阿里云windows 2012服务器部署java web程序教程

    一:环境搭建 1.首先需要购买一个阿里云ECS服务器,购买时可以选择处理器核数以及内存大小(可以购买偏低配置,因为升级      方便) 2.购买后会自动创建一个实例,可以使用该实例中显示的公网地址在 ...

  5. WebSocket介绍和一个简单的聊天室

    WebSocket是什么呢? WebSocket一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并被RFC7936所补充规范, ...

  6. 使用getParts()上传多个文件

    <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv=&quo ...

  7. [转]utf8编码原理详解

    from : http://blog.csdn.net/baixiaoshi/article/details/40786503 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态 ...

  8. IOS进阶之WKWebView

    前言 Xcode8发布以后,编译器开始不支持IOS7,所以很多应用在适配IOS10之后都不在适配IOS7了,其中包括了很多大公司,网易新闻,滴滴出行等.因此,我们公司的应用也打算淘汰IOS7. 支持到 ...

  9. C语言 遍历流程 变量生命周期

    来自c程序设计 谭浩强 程序编译流程 运行c程序的步骤 在编好一个c程序后.怎样上机进行编译运行呢?一般要经过一下几个步骤: 上机输入和编辑源程序.通过键盘和计算机输入程序,如果发现有错误,要及时改正 ...

  10. Delphi的 Format格式化函数

    转载自:http://www.cnblogs.com/mumble/archive/2011/05/25/2056462.html Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮 ...