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

[url=http://www.iteye.com/topic/740301]上一篇文章[/url]还有些话没说完,没想到一拖就是2周,所以干脆另开一篇吧。

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

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

1. 更加简洁,相对于XML的“语法”,java来得更熟悉
2. 类型安全,更大程度上发挥java静态语言的特性
3. 对重构更加友好

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

[b]1. java的语言文化[/b]

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

[b]2. spring本身的限制[/b]

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

* Enabling annotation-driven transaction management ()
* Enabling annotation-driven scheduling ()
* Enabling AspectJ auto-proxying ( * Enabling domain object DI with @Configurable ()
* Enabling property-placeholder replacement ()
* Enabling AspectJ load-time weaving ()
* Enabling MBean Export ()
* Enabling component scanning ()
* Performing JNDI lookups ()
* Looking up local and remote stateless session beans (; )

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

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

你可能感兴趣的:(java,XML,Spring,配置管理,iBATIS,Bean)