Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, yazılım mühendisi Hüseyin tarafından sunulan teknik bir eğitim serisidir. Eğitmen, günlük hayatta yaptığı işleri izleyicilere aktarmayı amaçlamaktadır.
- Video, Spring Framework ve Spring Boot teknolojilerinin temel kavramlarını, tarihçesini ve uygulamalarını kapsamlı şekilde ele almaktadır. İçerik, Dependency Injection, Inversion of Control, Bean scope kavramları, Spring Boot CLI kullanımı, Gradle yapılandırma, RESTful servisler yazma ve application properties kullanımı gibi konuları kod örnekleri ve pratik uygulamalarla anlatmaktadır.
- Eğitim serisi, Spring'in 2002'den günümüze kadar olan gelişimini kronolojik olarak sunmakta ve Spring Boot'un Spring'in üzerine kurulmuş, daha kolay uygulama geliştirme imkanı sunan bir framework olduğunu açıklamaktadır. Video boyunca izleyicilerden gelen sorular yanıtlanmakta ve ilerleyen haftalarda daha fazla içerik geliceği belirtilmektedir.
- 00:00Giriş ve Spring Boot Tanıtımı
- Konuşmacı Hüseyin, yazılım mühendisi olarak günlük hayatta yaptığı işleri izleyicilere aktarmaya çalıştığını belirtiyor.
- Git ve Docker konularını anlattıktan sonra, bu videoda Spring Boot'ı tanıtacağını ve pratikte ne yapabileceğini göstereceğini söylüyor.
- Spring Boot, sadece bu videoda değil, hafta hafta ilerleyen süreçte de kullanılacak bir teknoloji olacak.
- 00:48Spring Framework'in Temelleri
- Her şey Spring Framework ile başlamış olup, bu bir açık kaynak Java uygulama çerçevesidir.
- Spring Framework, Dependency Injection (DI) ve Inversion of Control (IoC) gibi teknolojileri çözümleyen bir teknoloji çerçevesidir.
- Spring, Java uygulamalarını çalıştırmak için gerekli olan teknolojileri kapsayan bir konteyner olarak düşünülebilir.
- 02:16Spring Konteynerinin Özellikleri
- Spring konteyneri, uygulamanın bileşenlerini (servisler, domain objeleri, client objeleri, konfigürasyon objeleri) yaratıp yönetebilen bir kapsüldür.
- Konteyner, bileşenler arasında ilişkileri yönetebilir.
- Konteyner, servislere transactional, persistence ve security gibi özellikler sağlayabilir.
- 03:42Transactional ve Persistence Özellikleri
- Transactional özellik, veritabanına yazılan işlemlerin geri alınmasını (rollback) sağlar ve fail senaryolarını yönetir.
- Persistence özelliği, veritabanına erişirken SQL yazmak yerine daha kolay bir arayüz sağlar.
- Security özelliği, belirli kullanıcıların belirli endpointlere erişimini kontrol etmeyi sağlar.
- 04:54Java Enterprise Edition ve Spring Framework Karşılaştırması
- Java Enterprise Edition'da da konteynerler bulunur ve servletleri, JSP'leri, filtreleri yönetir.
- Spring Framework, Java Enterprise Edition'daki konteynerlerin daha hafif (lightweight) versiyonudur.
- Spring uygulamaları genellikle bir JAR dosyası olarak oluşturulur ve kolayca yönetilebilir.
- 06:07Inversion of Control ve Dependency Injection
- Yazılımda "depend on interface" kavramı, ihtiyaçları belirtip ortamın bu ihtiyaçları sağlayacağı bir yaklaşımdır.
- Inversion of Control (IoC), kontrol mekanizmasını başka bir yere yönlendirme prensibidir ve Dependency Injection (DI) ise IoC'nin alt kolu olarak görülür.
- Spring framework'ü, interface'leri verdiğinizde uygun objeleri bulup size sunar, birden fazla uygun obje bulursa hata verir.
- 09:38Factory Pattern ve Spring'in Gelişim Hikayesi
- Factory Pattern, verilen parametreye göre birden fazla farklı obje oluşturabilme özelliğine sahiptir.
- Spring framework'ü, JDBC driver, Postgre client veya MongoDB driver gibi kompleks teknolojilerle uğraşmadan otomatik olarak ilgili objeleri oluşturabilir.
- Spring framework'ü 2002'de Rod Johnson tarafından yazılmış, ilk release'sı 2003'te çıkmış ve 2004'te ilk yapı taşı olarak 1.0 versiyonu yayınlanmıştır.
- 12:29Spring'in Konfigürasyon Evrimi
- 2004'te XML configuration, 2007'de annotation konfigürasyonu, 2012'de ise Java configuration desteği eklenmiştir.
- Annotationlar, XML ile yapılan yapılandırmalara alternatif olarak objelere farklı özellikler kazandırabilir.
- Java'nın 1.40, 1.50, 1.60 ve 1.70 versiyonları arasında büyük farklar vardır ve kurumsal şirketler bu versiyonları kolay kolay değiştiremezler.
- 14:39Spring'in Tarihçesi ve Gelişimi
- 2012'de Spring, Hibernate desteği ekledi; Hibernate, ORM (Object Relational Mapping) teknolojisi olarak database işlemlerini Java domainine dönüştürerek kolaylaştırır.
- 2017'de Spring 3.2'de XML konfigürasyonlarından Java konfigürasyonlarına geçiş yapıldı.
- 2014'te Java 8 desteği ve Spring Boot ortaya çıktı; Java 8 özellikle lambda ifadeleri ve stream API'leri ile dönüm noktası oldu.
- 16:04Spring Boot'un Özellikleri
- Spring Boot, Spring'in çok sayıda komponentini ve çözümlerini kolayca kullanabilmeyi sağlar; örneğin Mayıs kullanmak isteyenlere kolaylık sağlar.
- Spring Boot, proje türüne göre gerekli bağımlılıkları otomatik olarak ekler; örneğin JPA, web veya cloud projesi için gerekli bağımlılıkları otomatik olarak getirir.
- Spring Boot, uygulama yazma mantığını değiştirmiş; @SpringBootApplication antasyonu kullanılarak uygulamanın giriş noktası belirlenir ve tüm komponentler otomatik olarak ayağa kaldırılır.
- 20:22Spring ve Spring Boot Arasındaki Farklar
- Spring, inversion of control (IoC) prensibini uygulayarak bağımlılıkları yönetmeyi sağlar ve transactional, persistence, security gibi birçok destek sunar.
- Spring Boot, Spring'in özelliklerini gruplandırarak kullanıma sunar ve embedded web server (Tomcat, Jetty, Undertow) gibi teknolojileri içine koyabilir.
- Spring'in kendi dökümantasyonu ve spring.io sitesi gibi kaynaklar Spring öğrenmek için tavsiye edilir.
- 23:49Bağımlılık Tersine Dönüşümü
- ProductRepository sınıfı içinde getProductById metodu, verilen ID ile ürünü database'den çekip Product objesine dönüştürür.
- Metodun gövdesinde DataSource üzerinden connection yaratılıp, SQL sorgusu çalıştırılır.
- DataSource nesnesi, hangi veritabanı ile bağlantı kurulacağını belirler, ancak bu örnekte DataSource nesnesinin nasıl yaratılacağı gösterilmemiştir.
- 25:25Veritabanı Bağlantısı ve Polimorfizm
- Veritabanı bağlantısı için "DataSource ds = new MySQLDataSource()" şeklinde bir nesne oluşturuluyor ve burada polimorfizm kullanılıyor.
- DataSource üzerinden "getConnection()" metodu ile veritabanına bağlanılıyor.
- "FindByID" ve "FindByProductCode" gibi farklı metotlar kullanılarak veritabanından veri çekilebiliyor.
- 26:31Kodun Evrimi ve Bağımlılıkler
- Kodun evrimsel gelişimi için "DataSource" nesnesi daha merkezi bir yere taşınıyor.
- "Application" sınıfı içinde "DataSource" tanımlanıyor ve statik bir şekilde erişim sağlanıyor.
- Bu yapıda dezavantaj olarak repository'lerin veritabanı erişimini kendi içinde bilmeleri gerektiği belirtiliyor.
- 28:59Dependency Injection
- Dependency Injection için "ProductRepository" içinde "DataSource" parametre olarak geçiriliyor.
- "Application" sınıfında "DataSource" alınıp "ProductRepository" yaratırken parametre olarak geçiriliyor.
- Bu şekilde "ProductRepository", "DataSource" nesnesinin ne olduğunu bilmek zorunda kalmıyor.
- 29:54Spring ve Dependency Injection
- Spring'de "DataSourceConfiguration" sınıfı oluşturuluyor ve burada DataSource nasıl konfigüre edileceği belirleniyor.
- Spring'in Dependency Injection özelliği ile sistemin herhangi bir yerinden "DataSource" kullanılabilir.
- Spring'in sadece kod kısaltma değil, aynı zamanda veritabanı değişimi gibi işlevlerde de kolaylık sağladığı vurgulanıyor.
- 33:25Spring'de Interface Implementasyonu Seçimi
- Bir interface'in birden fazla implementasyonu olduğunda, Spring'in çözümü "qualifier" mekanizmasıdır.
- Qualifier, hangi implementasyonun kullanılacağını belirlemek için spesifik özellikler tanımlamanızı sağlar.
- Örneğin, "otobüs kullanabilen şoförü istiyorum" gibi belirli bir özellik belirterek, Spring doğru implementasyonu seçebilir.
- 35:27Spring Boot CLI ile Proje Oluşturma
- Spring Boot CLI, komut satırından proje initialize etmenizi sağlar.
- Proje oluştururken, kullanmak istediğiniz teknolojileri (Active MQ, Cassandra, Couchbase, Data Dog, Flyway, Freemarker, security gibi) belirtebilirsiniz.
- Proje tipi olarak hem Gradle hem de Maven projeleri oluşturulabilir.
- 37:43Proje Oluşturma Parametreleri
- Proje oluştururken artifact id'si, grup id'si, versiyonu, paket adı ve Java versiyonu gibi parametreleri belirtebilirsiniz.
- Java versiyonu belirtilmezse, varsayılan olarak bir snapshot versiyonu oluşturulur.
- Örnek olarak bir proje oluşturulurken Java 1.17 versiyonu seçilmiş ve Gradle projesi olarak ayarlanmıştır.
- 42:16Gradle ve Maven Karşılaştırması
- Maven yerine Gradle tercih edilmesinin nedenleri arasında esneklik ve performans bulunmaktadır.
- Gradle, Groovy DSL kullanarak kendi tasklarını yazabilme imkanı sunar.
- Gradle, paralel çalıştırma ve testlerde zeki yeniden çalıştırma gibi destekler sunar.
- 46:16Gradle Projesi ve Yapılandırma
- Proje dosyasında Spring Boot'un plugin'i bulunuyor ve bu plugin, Gradle ile projeyi build ederken özel parametreler sunuyor.
- Spring Boot özel bir compilation metodu sağlıyor, Java'da önce compile sonra run edilirken, Spring Boot bu süreci otomatikleştiriyor.
- Proje dosyasında dependency management, Java plugin'i ve repository bilgileri bulunuyor, Java versiyonu 1.7 olarak ayarlanmış.
- 48:53Spring Boot Uygulamasının Çalıştırılması
- Spring Boot uygulaması otomatik olarak ayağa kaldırılıyor ve Tomcat sunucusu 8080 portunda başlatılıyor.
- Scratch dosyası kullanılarak HTTP sorgusu atılabiliyor ve uygulama 404 döndürüyor çünkü başka bir şey bulunmuyor.
- Proje yapısında src/main/java altında Java dosyaları, src/test/java altında testler bulunuyor.
- 50:56Konfigürasyon ve REST Template
- Merkezi bir yere konfigüre edilen HTTP client'lar, sistemde tek bir instance olarak kullanılabilir ve gereksiz memory doldurulmasını önler.
- REST Template, HTTP client'ın özellikleri içinde hata yönetimi, interceptor gibi özellikler barındırıyor.
- Birden fazla REST Template konfigürasyonu gruplandırılarak farklı amaçlar için kullanılabilir.
- 54:49Spring Configuration ve Dependency Injection
- Spring Configuration sınıfı, @Configuration annotation ile işaretlenerek oluşturuluyor ve bu sınıf içinde REST Template tanımlanıyor.
- ProductService sınıfı, REST Template'i dependency injection ile kullanıyor.
- Command Line sınıfı, ProductService sınıfını kullanarak REST Template'i test etmek için kullanılıyor.
- 58:45Spring Boot Command Line Uygulaması
- Spring Boot'ta command line uygulaması yazmak için "CommandLineRunner" kullanılır.
- Command line uygulamasında bağımlılıklar (product servis, user servis) final olarak tanımlanır.
- Command line uygulaması çalıştırıldığında, bu servislerin metotları çağrılır.
- 1:01:32Spring'in Scope Özellikleri
- Spring'in default scope'u singleton'dır, yani aynı referansı her yerde döndürür.
- Scope'lar arasında singleton, prototype, request ve session bulunur.
- Prototype scope'u, her çağrıldığında yeni bir nesne oluşturur.
- 1:03:03Scope Kullanım Durumları
- Database bağlantısı gibi kaynakları tekil tutmak için singleton scope'u kullanılır.
- Her kullanıcı için özel bir nesne oluşturmak için prototype scope'u tercih edilir.
- Web uygulamalarında her request için ayrı nesne oluşturmak için request veya session scope'u kullanılabilir.
- 1:08:00RestTemplate Kullanımı
- RestTemplate, HTTP istekleri göndermek için Spring'in sunduğu bir araçtır.
- RestTemplate kullanarak API'lere istek atılabilir ve yanıtlar alınabilir.
- JSON dönüşlerini işlemek için Jackson gibi kütüphaneler kullanılabilir.
- 1:15:06API Çağrısı ve Veri İşleme
- RestTemplate kullanılarak "randomuser" API'sine istek atılarak rastgele kullanıcı verileri alınabilir.
- API'den gelen JSON verileri, Java sınıflarına dönüştürülebilir.
- JSON verilerini işlemek için Jackson kütüphanesinin özelliklerinden faydalanılabilir.
- 1:21:39Spring Web Uygulaması ve JSON İşleme
- Kullanıcıya "emekliotken@gmail.com" adresi üzerinden bilgi gönderildiği belirtiliyor.
- Spring web uygulamasında REST pointler yazarken, controller içinde actionlar tanımlanıyor.
- Gelen JSON verisini objeye çevirirken Spring, Jackson kütüphanesini kullanarak seri hale getirme işlemi yapıyor.
- 1:23:51Controller ve Servis Tanımlama
- Controller içinde @RestController annotation'u kullanılarak HTTP metotları (POST, GET) için actionlar tanımlanıyor.
- Controller içinde private değişkenler tanımlanarak response objeleri oluşturuluyor.
- Servis katmanı kullanılarak dışarıdan gelen veriler işleniyor ve response olarak dönüştürülüyor.
- 1:31:52Konfigürasyon Yönetimi
- Spring'in @Configuration annotation'u kullanılarak uygulama konfigürasyonları yönetilebiliyor.
- Application properties dosyası kullanılarak uygulama ayarları yapılabiliyor.
- Konfigürasyon sınıflarında @ConfigurationProperties annotation'u kullanılarak properties dosyasındaki değerler otomatik olarak doldurulabiliyor.