论坛首页 Java企业应用论坛

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

浏览 10456 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-09-02   最后修改:2010-09-02
上一篇文章还有些话没说完,没想到一拖就是2周,所以干脆另开一篇吧。

从回帖的反应来看,大多数人还是不赞成完全代替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怎么能缺席呢?
   发表时间:2010-09-02  
俺觉着:

Spring用Annotation代替配置文件非常有必要
Ibatis用Annotation代替配置文件是倒退

如果配置信息本身是类/类的成员的特性,那么应该用Annotation;
如果配置信息依赖于外部环境,应该用配置文件
0 请登录后投票
   发表时间:2010-09-02  
对于依赖注入的设置,个人觉得Annotation比XML更加直观,方便。

正在做的一个项目正在使用Annotation替代XML管理依赖关系。
0 请登录后投票
   发表时间:2010-09-02  
凡事无绝对,只强调一面是片面的,要从多方面看问题,每个事物的存在都有它的必然性,你这个标题使我想到了,搞web设计的全都用css写,这个观点与你相似,其实这种观点是错误的,annotation要和xml合理搭配,才能起到好的效果
0 请登录后投票
   发表时间:2010-09-03  
zhangzi 写道
凡事无绝对,只强调一面是片面的,要从多方面看问题,每个事物的存在都有它的必然性,你这个标题使我想到了,搞web设计的全都用css写,这个观点与你相似,其实这种观点是错误的,annotation要和xml合理搭配,才能起到好的效果


每个事物的存在都能找到理由,但不一定是必然的。凡事无绝对,存在即合理等等这种大而空的理论大概就是我所说的语言文化的一部分吧,不能说这些理论是错误的,但我更想听你说说XML的优点,以及怎样才叫合理搭配?
0 请登录后投票
   发表时间:2010-09-03  
鱼言风语 写道
俺觉着:

Spring用Annotation代替配置文件非常有必要
Ibatis用Annotation代替配置文件是倒退

如果配置信息本身是类/类的成员的特性,那么应该用Annotation;
如果配置信息依赖于外部环境,应该用配置文件

揣摩着有点道理
0 请登录后投票
   发表时间:2010-09-03  
鱼言风语 写道
俺觉着:

Spring用Annotation代替配置文件非常有必要
Ibatis用Annotation代替配置文件是倒退

如果配置信息本身是类/类的成员的特性,那么应该用Annotation;
如果配置信息依赖于外部环境,应该用配置文件


赞同,Spring新版大力推Annotation也是基于此,很多必然且几乎不会改变的依赖没必要放到配置文件。

尝试过给Ibatis加Annotation,如果把Dao(或者3.0的Mapper)跟sqlmap一一对应的话把sql注入到类里还有点价值,其他配置,留给xml吧
0 请登录后投票
   发表时间:2010-09-03  
我是一个新手,个人理解,大型项目还是用XML比较好,因为那样一看XML文件就能明白各个BEAN之间的关系。如果都用注解方式,还得一个一个到Java类中看。维护起来比较麻烦。
这只是我个人理解,如果有说错的地方,希望指教。
1 请登录后投票
   发表时间:2010-09-03  
鱼言风语 写道
俺觉着:

Spring用Annotation代替配置文件非常有必要
Ibatis用Annotation代替配置文件是倒退

如果配置信息本身是类/类的成员的特性,那么应该用Annotation;
如果配置信息依赖于外部环境,应该用配置文件


支持,方便理解代码。
0 请登录后投票
   发表时间:2010-09-03  
wwy_0918 写道
鱼言风语 写道
俺觉着:

Spring用Annotation代替配置文件非常有必要
Ibatis用Annotation代替配置文件是倒退

如果配置信息本身是类/类的成员的特性,那么应该用Annotation;
如果配置信息依赖于外部环境,应该用配置文件


支持,方便理解代码。



Annotation的用途可不是为了方便理解代码,有了Annotation,你自己就可以很容易的做你自己的AOP了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics