Spring Boot ile Jersey Kullanımı
7.3 JAX-RS ve Jersey başlıklı bölümdeki Spring Boot Referans Dokümantasyonu " Kayıtlı tüm uç noktalar @Component ve HTTP kaynak ek açıklamaları olmalıdır ( @GET ve diğerleri). Uç Nokta bir Spring @Component olduğundan, yaşam döngüsü Spring tarafından yönetilmektedir ve bağımlılıkları enjekte etmek için @Autowired açıklamasını kullanabilir ve harici konfigürasyonu enjekte etmek için @Value açıklamasını kullanabilirsiniz ".
Ancak Jersey kaynaklarıma bağımlılıkların enjekte edilmesini veya harici konfigürasyonun enjekte edilmesini umursamıyorum ve bu nedenle Jersey kaynaklarıma @Components olarak açıklama eklemedim. Uygulamam gayet iyi çalışıyor.
Spring Boot Referans Dokümantasyonunu okurken, Jersey kaynaklarını @Components olarak kaydetmenin bir gereklilik olduğu görüldü. Ancak durum böyle görünmüyor. Bana göre bu, Spring Boot Referans Belgelerinde küçük bir hata gibi görünüyor. Belgeler " kayıtlı uç noktalar @ Bileşenler olmalıdır " dan " kayıtlı uç noktalar @ Bileşenler olabilir " şeklinde güncellenebilir. Bu mantıklı mı?
Yanıtlar
Bunu denedim ve bir Jersey kaynağına Spring @Component ek açıklamasıyla açıklama eklemenin isteğe bağlı olduğunu öğrendim. Bu notu kullanırsanız, kaynağın yaşam döngüsü Spring tarafından yönetilecektir ve bu notu KULLANMAZsanız, yaşam döngüsü Jersey tarafından yönetilecektir.
Unutulmaması gereken önemli bir nokta, bu yaşam döngüsünün ikisi arasında varsayılan olarak nasıl programlandığı konusunda büyük bir fark olduğudur.
Belirtildiği gibi bölüm 3.4 arasında Jersey Kullanıcı Kılavuzu " Varsayılan olarak kök kaynak sınıfların yaşam döngüsü, bir kök kaynak sınıfının yeni örneği her zaman oluşturulur yani o istek URL yolu kök kaynağı maçları hangi istek başına olduğunu. Bu, kurucuların ve alanların aynı kaynağa birden çok eşzamanlı istek için endişe duymadan kullanılabildiği çok doğal bir programlama modeli sağlar.Genel olarak bu, performans sorunlarının bir nedeni olma olasılığı düşüktür.JVM'lerin sınıf yapımı ve çöp toplama üzerinde büyük ölçüde iyileştirilmiştir. yıllar ve birçok nesne, HTTP isteğini sunmak ve işlemek ve HTTP yanıtını döndürmek için oluşturulacak ve atılacak. "
Ancak Bahar Çerçeve Dokümantasyonu bölüm 1.5'te belirtildiği gibi ; fasulye varsayılan olarak tek tondur. " Spring IoC konteyneri, bu fasulye tanımıyla tanımlanan nesnenin tam olarak bir örneğini oluşturur. Bu tek örnek, bu tür tekli çekirdeklerin bir önbelleğinde saklanır ve bu adlandırılmış fasulye için sonraki tüm istekler ve başvurular, önbelleğe alınan nesneyi döndürür. "
Dolayısıyla bir fark var. Normal Jersey kök kaynak sınıfları varsayılan olarak istek başına somutlaştırılırken, Spring ile bir kaynak @Component ile açıklandığında tekil olacaktır. yani JVM'nin ömrü boyunca yalnızca bir örnek. Spring tarafından yönetilen kaynakların normal Jersey kaynaklarıyla gelen aynı istek başına yaşam döngüsüne sahip olmasını istiyorsanız @Scope(scopeName = WebApplicationContext.SCOPE_REQUEST), @Component ek açıklamasına ek olarak Bahar açıklamasını eklemelisiniz. Bunu eklediğinizde, kaynak yaşam döngünüz artık istek başına olacaktır.