反对批注的论据

2022-08-31 16:43:19

我的团队正在迁移到Spring 3.0,有些人想开始将所有内容都移到Notess中。当我看到一个具有类似这样的方法的类时,我只是在我的肠道中得到了一种非常糟糕的感觉(代码气味?):(只是一个例子 - 不是所有真正的注释)

@Transaction
@Method("GET")
@PathElement("time")
@PathElement("date")
@Autowired
@Secure("ROLE_ADMIN")
public void manage(@Qualifier('time')int time) {
...
}

我只是落后于时代,还是这一切对其他人来说都是一个可怕的想法?而不是使用像继承和多态性这样的OO概念,现在一切都是通过约定或通过注释。我只是不喜欢它。必须重新编译所有代码来更改IMO配置的内容似乎是错误的。但这似乎是一切(尤其是春天)的发展方式。我应该只是“克服它”还是应该反击并尝试保持我们的代码尽可能自由的注释?


答案 1

实际上,我认为你内心的不良感觉更多地与注释有关,比如这种将配置与代码混合在一起。

就我个人而言,我和你一样,我更喜欢将配置(例如事务定义,路径元素,控制器应映射到的URL等)留在代码库本身之外和外部Spring XML上下文文件中。

我认为,虽然这里的正确方法归结为意见和你更喜欢哪种方法 - 我预测一半的社区会同意注释方法,另一半会同意外部配置方法。


答案 2

也许您在代码中到处都是冗余注释时遇到了问题。使用元注释,可以替换冗余注释,并且您的注释至少是 DRY。

来自春季博客:

@Service
@Scope("request")
@Transactional(rollbackFor=Exception.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyService {
}

@MyService
public class RewardsService {
…
}

因为Java发展得如此之慢,人们正在将语言中缺少的更多功能放入注释中。Java可以以某种形式扩展,这是一件好事,因为大多数注释都是一些解决方法并增加了复杂性。