Sorunun Tarihi:
Anotasyonlar, Java 5'te, programın mantığını değiştirmeden byte koduna meta bilgi eklemek amacıyla ortaya çıktı. Anotasyonlar, sınıfları ve yöntemleri çerçeveler, derleyiciler veya ayrıştırıcılar için ek bilgilerle kolayca donatmaya olanak tanır.
Sorun:
Kötü tasarlanmış veya yanlış kullanılan anotasyonlar, kodun bakımını zorlaştırır. Bazen geliştiriciler anotasyonların kullanımını karıştırır veya kendi anotasyonlarını nasıl yapacaklarını bilmez ve parametreli anotasyonlar oluşturma olanağının farkında olmazlar.
Çözüm:
Kendi anotasyonunuzu oluşturmak:
import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { String value() default ""; }
Anotasyonu kullanma:
public class TestClass { @MyTest("Example") public void testMethod() {...} }
Anahtar özellikler:
Bir anotasyon diğer bir anotasyondan miras alınabilir mi?
Cevap: Hayır, Java'da anotasyonlar arasında miras alma desteklenmemektedir.
Bir anotasyonun tüm sınıf mirasçılarında zorunlu hale getirilmesi mümkün mü?
Cevap: Doğrudan değil. Anotasyonun varlığını elle kontrol ederek ek olarak yansıma ile kontrol etmeniz gerekir.
@Retention(Class) ile @Retention(RUNTIME) arasındaki fark nedir?
Cevap:
Projede yapılandırmayı XML'den anotasyonlara değiştirmeye karar verdiler ama @Retention(RUNTIME) eklemediler.
Artılar:
Eksiler:
Sunucuda gerçek iş mantığının çağrısını kontrol eden @Audit adı verilen özel bir anotasyon ayarlandı.
Artılar:
Eksiler: