Xml配置与基于注释的配置[关闭]

问题

在我最近一直在研究的一些大型项目中,选择其中一个(XML或Annotation)似乎变得越来越重要。随着项目的增长,一致性对于可维护性非常重要。

我的问题是,人们更喜欢什么。你更喜欢基于XML还是基于注释?或两者?每个人都在讨论XML配置地狱以及注释是如何解决的,那么Annotation配置到底是什么?


#1 热门回答(193 赞)

注释有其用途,但它们不是杀死XML配置的银弹。我建议混合两个!

例如,如果使用Spring,则将XML用于应用程序的依赖项注入部分是完全直观的。这使得代码的依赖性远离将要使用它的代码,相反,在代码中使用某种类型的注释需要依赖关系使代码知道这种自动配置。

但是,不是使用XML进行事务管理,而是将方法标记为带有注释的事务,这非常有意义,因为这是程序员可能希望知道的信息。但是一个接口将被注入为SubtypeY而不是SubtypeX不应该包含在类中,因为如果现在你想要注入SubtypeX,你必须改变你的代码,而你之前有一个接口契约,所以使用XML,你只需要更改XML映射,这样做非常快速且轻松。

我没有使用JPA注释,所以我不知道它们有多好,但我认为将bean映射到XML中的数据库也很好,因为对象不应该关心它的信息来自何处,它应该只关心它可以用它的信息做什么。但是如果你喜欢JPA(我对它没有任何考虑),那么一定要去吧。

通常:如果注释提供了功能并且本身充当注释,并且没有将代码绑定到某个特定进程以便在没有此注释的情况下正常运行,那么请转到注释。例如,标记为事务性的事务方法不会终止其操作逻辑,也可以作为良好的代码级注释。否则,此信息可能最好表示为XML,因为尽管它最终会影响代码的运行方式,但它不会更改代码的主要功能,因此不属于源文件。


#2 热门回答(30 赞)

这里存在一个更广泛的问题,即外部化和内联元数据。如果你的对象模型只是以一种方式持久化,那么内联元数据(即注释)更加紧凑和可读。

但是,如果你的对象模型在不同的应用程序中以每种应用程序想要以不同方式持久化的方式重用,则外部化元数据(即XML描述符)变得更加合适。

虽然注释更加时髦,但两者都不是更好,所以两者都得到了支持。因此,像JPA这样的新发型框架往往更加强调它们。像本机Hibernate这样的更成熟的API提供了两者,因为众所周知,这两者都不够。


#3 热门回答(13 赞)

我总是将注释视为某种类型的指示符,它可以与其他人交互。

另一方面,Spring XML配置对我来说就是配置

例如,有关代理的ip和端口的信息肯定会进入XML文件,它是运行时配置。

使用@Autowire,@Element来指示框架如何处理类是很好地使用注释。

将URL放入@Webservice注释是不好的样式。

但这只是我的意见。交互和配置之间的界限并不总是很清楚。