用 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 本身设计造成耦合侵入是另外一个回事,与此话题无关。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值