用 Annotation 改造 Java 开发模式。

用 Annotation 改造 Java 开发模式。

Annotation 已经出现很多年了,且使用日益广泛,最近讨论过一次对 Annotation 使用的取舍,整理做个记录。

Annotation 本质上像是另一类 Interface,通过 @interface 描述符也可以猜得出。
相比 interface 的优点是,它不仅可以用来描述 Type,还可用于 Field,Method,Parameter,Package ...
在实际使用中,Annotation 一般都用于实现复杂的“反射”和“配置”。

我曾经也对 Annotation 有一种保守的意见,认为过多的使用 Annoation 会降低Class的复用性,是一种“Bean的具体实现”侵入了“Class的内部设计”的行为,例如 Spring 基于 Annotation 的依赖注入实现,使得 Class 代码耦合了环境和容器,而此前 xml 配置方式因为和 Class 代码是分离的,没有侵入,从而保证了Class的灵活。
从无侵入的角度看 xml 更加灵活是对的,但实际生产力表现 Annotation 无疑具有更高的开发效率。实际上这里并不矛盾。

看真实的物理世界是怎样的?很明显,它本质上由一个个的对象组成,“类型”的概念只是人的意志抽象出来的产物。(这里可能涉及复杂的哲学分歧,不作深入讨论)
我们设计一个系统,就是用软件模型来模拟现实世界的活动,然而现实世界并不存在独立意义的 type,type 只是概念,存在于抽象中。我们设计系统也并不是在单纯设计 Class,实际上很多时候是在设计 Bean。
所以说,保证 Class 代码上的复用性不是必须的,并不是所有Class都被要求保留存在多个instance的可能,系统中运行的本来就是 Bean 实例,而且很多还都是单例。
以设计 Bean 实例的思想去考虑对 Annotation 的使用,更加符合现实模型,离真理更近一步。

当然,滥用 Annotation 或者 Bean 本身设计造成耦合侵入是另外一个回事,与此话题无关。

你可能感兴趣的:(java,设计模式,spring,bean,xml)