上一篇文章还有些话没说完,没想到一拖就是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怎么能缺席呢?
分享到:
相关推荐
4. **注解驱动的Spring**:"Spring3.0-annotation"章节会介绍如何利用Java注解来代替XML配置,如`@Component`、`@Service`、`@Repository`和`@Controller`等,这些注解可以帮助我们声明bean及其作用范围。...
- 自Spring 3.0起,可以用Java配置代替XML配置,同样使用`@EnableTransactionManagement`开启事务管理,然后使用`@Transactional`注解。 ```java @Configuration @EnableTransactionManagement public class ...
2. **注解配置 (Annotation-based Configuration)**:Spring 2.5 引入了大量注解,如 `@Autowired`、`@Required` 和 `@Component` 等,使得开发者可以使用注解代替 XML 配置文件,简化了配置过程,提高了开发效率。...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...
Spring 3.0引入了基于Java的配置支持,可以通过`@Configuration`注解定义配置类。在配置类中,使用`@Bean`注解的方法来定义Bean实例。这种方式相比于XML配置更加简洁、易于维护。 29. **解释Spring的模板类,如...
- **注解驱动**:用注解(Annotation)代替XML配置,简化了元数据的声明,减少了出错可能,提高了开发效率。 - **依赖注入**:引入了Dependency Injection(DI)概念,替代了传统的JNDI查找机制,使Session Bean的...
例如,我们可以使用`@WebFilter`和`@WebListener`来代替web.xml中的filter和listener元素。 总的来说,Servlet注解配置提供了以下优势: 1. **简洁性**:注解使得配置更加直观,减少了大量XML配置文件的编写。 2. ...