search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
807 gösterim

Spring'de @Repository ve @Autowired nasıl ve hangi amaçla kullanılır? Bu annotationları kullanmadan projemiz çalıştırabilir miyiz? spring uygulaması bunları algılayabilir mi?

Örneğin CrudRepository yu extend ettim bir interface'imde ancak annotation koymazsam olur mu?

//@Repository
public interface EmployeeRepository extends JpaRepository<Employee,Long>{
}
Genel Kavramlar kategorisinde 2.0k puan

1 cevap

1 oy

Senin için ufak bir grafik çizdim.
Önce bilmiyorsan context kavramını detaylandırman lazım. Ben kısaca söyleyeyim. Spring uygulaması ayağa kalktığı zaman sınıfına @Component,@Repository, @Service, @Controller annotationlarından biri eklenmişse onu kendi yönetir. Yani sen new diyerek oluşturmazsın. O oluşturur context içine atar orda durur. Yukarıda birkaç tane rastgele yazdım.
Sen new demediğine göre bu değerleri nasıl alacaksın? Burda da @Autowired devreye giriyor. Mesela MemberService sınıfında MemberRepository, EmailRepository ve AddressRepository sınıflarını kullanmak istiyorsun. O zaman kodun aşağıdaki gibi olur.

@Service
class MemberService {
@Autowired MemberRepository members;
@Autowired EmailRepository emails;
@Autowired AddressRepository addresses;
...
}

Artık tek tek sınıfları new diye oluşturmaya gerek kalmayacak. Spring kendisi oluşturup birbirine otomatik bağlar.

Eğer başına bu annotationlardan eklenmiş bir sınıfı sen yine de new diyerek oluşturursan sınıfın yönetimini springden sen almış oluyorsun. Onun içindeki @Autowired alanlar çalışmaz. Hepsini kendin oluşturman gerekir.


@Controller, @Service, @Repository, @Component aynıdır birbirinin yerine kullanılabilir. @RestRepository aynı değildir.

6.2k puan
  • @repository yi yazmazsak springin obje relation mapping i yapamıyor olması demek midir? Çünkü ben @repository yazmasam dahi data crud yapabilidim. (H2db ile). Bir yanlışlık varsa eğer sence, şimdi de aklıma acaba proje yeniden denlenmedi mi diye sorguluyorum.
  • İkinci sorum  : AddressService ve AddressServiceImp (@service olan) classlarım var. Bu ayrımı bazı projelerde Implementaion ı bir yazılmış. Bu kısım için fikrin nedir?

Birinci sorunun cevabını vereyim. İkincisi için "ilgili soru sor" butonuyla yeni bir soru açarsan daha güzel olur.

Springin sana sunduğu annotationları kullanırsan objelerin hafıza yönetimi springe bırakmış olursun. Bir sınıfın üstüne @Repository yazarsan sınıfı hafızada spring new diyerek oluşturur, daha sonra dependency injection için sınıfın içinde springin yönetmesi gereken başka annotation ile belirlenmiş alan var mı diye bakar. Varsa onları da spring yönetiyor mu diye bakar ve yönetiyorsa sınıfa bağlar, yani değişkene atama yapar. Bi kere bu kısmı iyice oturtman lazım. ORM kısmı spring data ile gelen bir parça oluyor.

Anlamak için şunu yapabilirsin.

@Repository class A{
 
  @Autowired B b;

   public void hi(String name) {
      b.hi(name);
   }

}

@Repository class B {
   public void hi(String name) {
     System.out.println("hi " + name);
  }
}

 

 Gayet basit A sınıfı B sınıfına muhtaç Hem A hem B sınıfları şu an spring tarafından yönetildiği için sıkıntı olmaz. Ama gider B sınıfından @Repository annotationunu silersen hata alırsın. Çünkü A'yı spring ayağa kaldırırken B Autowired olduğu için dependent (muhtaç) diyecek ve bağlamaya çalışacak. Ama B sınıfında annotation'u kaldırdığın için onu yönetmiyor. Kaldı patladı. Birkaç örnekle daha detaylı anlamaya çalışabilirsin.

İlgili sorular

0 oy
1 cevap 2.3K gösterim
2.3K gösterim
Spring'de @Component, @Service, @Controller ve @Repository ne işe yarar. Farkları nelerdir?
4 Aralık 2017 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 2.1K gösterim
2.1K gösterim
Selam, Spring projesinde @Qualifier ve @Component annotationları ne işe yaramaktadır?
5 Şubat 2017 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 588 gösterim
588 gösterim
Spring 'de component ile service ve repositor anatasyonlarının ne farkı vardır?
29 Eylül 2020 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 737 gösterim
737 gösterim
PK olarak user ın user id sini otomatik unique yapılıyor sanıyorum alttaki kod ile. Başka field ile unique constraint nasıl yaparım.Ben ise birthdate unique olsun her member id için istiyorum, yani composite key yapıp userId + birthdate unique constrait ... kaynakta şunun olabilceği yazıyordu, bununla generatedValue dekinin farkı nedir ozaman merak ediyorum. @Column(name = "userId",unique=true)
14 Temmuz 2017 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 412 gösterim
412 gösterim
Spring'de DI (Dependency Injection) yapıyoruz, bunun 3 farklı yolu da var. Constructor ,property ve method ile. Peki bunların arasında ne fark var? Tüm DI ları neden property yapıp geçsek olmaz mı ya da constructor ile ? Özetle DI yaparken nasıl yapacağımızı neye göre karar veriyoruz?
1 Ekim 2020 Unix/Linux kategorisinde tolgacelik.art 2.0k puan sordu