Herkese merhaba.Bu yazımızda da yine filter konusunda yazacağımız filter sadece belli kaynak fonksiyonlarına özel olacak.Bunu yaparken ilk defa kendi açıklamamızı oluşturacağız.Daha sonra yazdığımız filter ve kullanacağı kaynak fonksiyon,sınıf,interface veya her neyse,bu açıklama ile işaretlenecek.Binding olayıda tam da burada karşımıza çıkıyor.Türkçe anlamıyla bağlayıcı olan bu kelimenin görevi anlaşılacağı gibi adından geliyor.Gördüğünüz gibi filter ile belli bir kaynağı birbirine bağlayacak.Ek açıklamamızı (Annotation) kodlarken satırlarımızı tek tek açıklayacağız.Şimdi kodlama kısmına geçelim.Üzerinde duracağımız tek yer annotation'ın oluşturulduğu yer.Yazdığımız bu ek açıklama ile bağlayacağımız yerleri işaretlememiz gerekiyor.Kodlar üzerinden devam edelim.
Şuan logged adında bir annotation oluşturduk.@target açıklaması yazdığımız logged açıklamasının nerelerde kullanılabileceğini belirtiyor.TYPE ve METHOD birlikte kullanılmış.Bunun anlamı yazdığımız annotation hem fonksiyonlar üzerinde hem de sınıf,interface,enum gibi yapılarda çalışabilir.Bir sonraki satırda ise @Retention açıklamasında bu yazdığımız açıklamaya hangi zamanda erişilsin.Bu değerin varsayılanı RetentionPolicy.CLASS'tır.Burada kullanılan RUNTIME ise bu açıklamaya sadece çalışma zamanında erişim vardır anlamındadır.Bu da java da Java Reflection API tarafından yapılır.
Buradan araştırabilirsiniz.Şimdide kodlarımızın geri kalanına bakıp programımızı derleyelim.
Çıktımız ise şu şekilde olacak.Sadece GET/customers gibi bir istekte sunucumuza herhangi bir ek kayıt düşmeyecek.Yani filter kullanılmayacak fakat eğer GET/customers/{id} gibi bir istek gelirse filter kullanılacak.Aşağıdaki görsellerde de çok açık bir şekilde görünüyor.
Bu işi dinamik olarakta gerçekleştirebiliriz.Yani aynı şekilde istediğimiz alanlar için bir filter yazmak istiyorsak,dynamicfeature interfaceni imlement edip gerekli
kontrolleri yapamız gerekir.
Umarım faydalı olmuştur.Sağlıcakla kalın.