Yanıtların çoğu zaten bu ek açıklamaların ne için kullanıldığını belirttiğinden, burada aralarındaki bazı küçük farklılıklara odaklanacağız.
İlk olarak benzerlik
Tekrar vurgulanmaya değer ilk nokta, otomatik tarama taraması ve BeanDefinition için bağımlılık enjeksiyonuna göre tüm bu ek açıklamaların (viz., @Component, @Service, @Repository, @Controller) aynı olmasıdır. Birini diğerinin yerine kullanabiliriz ve yine de yolumuza devam edebiliriz.
@Component, @Repository, @Controller ve @Service arasındaki farklar
@Bileşen
Bu, sınıfın bir yay bileşeni olduğunu gösteren genel amaçlı bir klişe notudur.
@Component ne özelliği var
<context:component-scan> sadece tarar
@Component ve aramaz
@Controller ,
@Service ve
@Repository genel olarak. Taranırlar çünkü kendileriyle açıklamalıdırlar
@Component .
Sadece bir bakmaktır
@Controller ,
@Service ve
@Repository açıklama tanımları:
@Component
public @interface Service {
….
}
@Component
public @interface Repository {
….
}
@Component
public @interface Controller {
…
}
Böylece, söylemek yanlış değil
@Controller ,
@Service ve
@Repository özel türleri vardır
@Component açıklama.
<context:component-scan> onları alır ve açıklamalıymış gibi izleyen sınıflarını fasulye gibi kaydeder
@Component .
Özel tür ek açıklamalar da taranır, çünkü kendileri ek açıklama ile
@Component ek açıklama alırlar, yani bunlar da
@Component s. Kendi özel ek açıklamamızı tanımlayıp eklersek eklersek
@Component , aynı zamanda taranır.
<context:component-scan>
@Repository
Bu, sınıfın bir veri deposu tanımladığını belirtmek içindir.
@Repository'nin nesi özel?
Bunun Ek Açıklamaya dayalı bir Yapılandırma olduğunu belirtmenin yanı sıra ,
@Repository işin platforma özel istisnaları yakalamak ve onları Spring'in birleşik kontrol dışı istisnalarından biri olarak tekrar atmak. Bunun için,
PersistenceExceptionTranslationPostProcessor Spring'in uygulama bağlamına şu şekilde eklemek zorunda olduğumuz belirtilmiştir:
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
Bu fasulye post işlemcisi
@Repository , platforma özel istisnalar yakalanıp Spring'in denetlenmemiş veri erişim istisnalarından biri olarak yeniden atılması için açıklamalı herhangi bir fasulyeye bir danışman ekler .
@Controller
@Controller Açıklama özel bir sınıf bir kontrol görevi görür göstermektedir.
@Controller Açıklama rolünü gösteren açıklamalı sınıf için bir klişe olarak hareket eder.
@Controller'ın özelliği nedir?
Biz gibi diğer bu ek açıklama geçemezsiniz
@Service ya
@Repository da aynı görünür halde. Dağıtıcı, açıklama eklenmiş sınıfları tarar ve içindeki ek
@Controller açıklamalarla eklenmiş yöntemleri algılar
@RequestMapping . Biz kullanabilirsiniz
@RequestMapping kimin sınıflar not eklenmiş sadece bu yöntemlerde / üzerinde
@Controller ve onu edecektir DEĞİL çalışmak
@Component ,
@Service ,
@Repository vs ...
Not: Eğer bir sınıf zaten içinden
@Bean veya içinden
@Component ,
@Service etc ... ek açıklamaları gibi alternatif bir yöntemle fasulye olarak kaydedilmişse , o
@RequestMapping zaman sınıf ayrıca ek açıklamalarla da eklenmişse seçilebilir
@RequestMapping . Ama bu farklı bir senaryo.
@Hizmet
@Service fasulye depodaki iş mantığını ve çağrı yöntemlerini tutar.
@Servis hakkında özel olan nedir?
İş mantığını tuttuğunu belirtmek için kullanılmasının dışında, bu açıklamada dikkat çekecek başka bir şey yoktur; Ancak kim bilir, Bahar gelecekte bazı istisnai durumlar ekleyebilir.
Başka?
Yukarıda olduğu gibi, gelecekte Bahar için özel işlevleri ekleyebilir
@Service ,
@Controller ve
@Repository bunların katman anlaşmalar esas. Bu nedenle, kongreye saygı göstermek ve katmanlarla aynı çizgide kullanmak her zaman iyi bir fikirdir.