Lietuvių

Išsamus Spring kūrimo vadovas, apimantis pagrindines koncepcijas, geriausias praktikas, pažangias technikas ir naujausias tendencijas programuotojams visame pasaulyje.

Spring Kūrimo Meistriškumas: Išsamus Vadovas Pasaulio Programuotojams

„Spring Framework“ tapo kertiniu verslo Java kūrimo akmeniu, suteikiančiu programuotojams visame pasaulyje galimybę kurti patikimas, keičiamo dydžio ir lengvai prižiūrimas programas. Šis išsamus vadovas siūlo gilų pasinėrimą į Spring kūrimą, apimantį esmines koncepcijas, geriausias praktikas ir pažangias technikas, kurios padės jums įvaldyti šią galingą sistemą.

Kas yra „Spring Framework“?

„Spring Framework“ yra atvirojo kodo programų karkasas ir kontrolės inversijos (Inversion of Control) konteineris, skirtas Java platformai. Jis suteikia išsamią infrastruktūrinę paramą kuriant Java programas, nuo paprastų interneto programų iki sudėtingų verslo sprendimų. Jo modulinė konstrukcija leidžia programuotojams naudoti tik tas karkaso dalis, kurių jiems reikia, todėl jis yra labai pritaikomas skirtingiems projekto reikalavimams.

Pagrindinės „Spring Framework“ savybės

Darbo su „Spring Boot“ pradžia

„Spring Boot“ dramatiškai supaprastina Spring pagrindu sukurtų programų kūrimo procesą. Jis suteikia automatinę konfigūraciją, įterptuosius serverius ir daugybę kitų funkcijų, kurios sumažina reikalingo standartinio kodo (boilerplate) kiekį.

„Spring Boot“ projekto sukūrimas

Lengviausias būdas pradėti dirbti su „Spring Boot“ yra naudoti „Spring Initializr“ (start.spring.io). Šis internetinis įrankis leidžia sugeneruoti pagrindinį „Spring Boot“ projektą su reikalingomis priklausomybėmis. Galite pasirinkti norimą kūrimo įrankį („Maven“ ar „Gradle“), Java versiją ir priklausomybes. Pavyzdžiui, galite pasirinkti „Web“, „JPA“ ir „H2“, kad sukurtumėte paprastą interneto programą, kuri naudoja reliacinę duomenų bazę.

Pavyzdys: Paprasto REST API kūrimas su „Spring Boot“

Sukurkime paprastą REST API, kuri grąžina „Hello, World!“ pranešimą.

1. Sukurkite „Spring Boot“ projektą naudodami „Spring Initializr“.

2. Pridėkite `spring-boot-starter-web` priklausomybę į savo projektą.

3. Sukurkite valdiklio klasę:


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

4. Paleiskite programą.

Dabar galite pasiekti API galinį tašką adresu `http://localhost:8080/hello` ir pamatysite pranešimą „Hello, World!“.

Pagrindinės Spring kūrimo koncepcijos

Priklausomybių injekcija (DI) ir kontrolės inversija (IoC)

Priklausomybių injekcija (DI) yra projektavimo šablonas, kuris skatina silpną susiejimą tarp programos komponentų. Užuot objektai patys kurtų savo priklausomybes, jos yra jiems įdiegiamos. Kontrolės inversija (IoC) yra platesnis principas, apibūdinantis, kaip karkasas („Spring“ konteineris) valdo objektų kūrimą ir susiejimą.

DI ir IoC privalumai

Pavyzdys: DI naudojimas Spring


@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

@Repository
public interface UserRepository extends JpaRepository {
}

Šiame pavyzdyje `UserService` priklauso nuo `UserRepository`. `UserRepository` yra įdiegiama į `UserService` konstruktorių naudojant `@Autowired` anotaciją. Tai leidžia „Spring“ valdyti šių komponentų kūrimą ir susiejimą.

Į aspektus orientuotas programavimas (AOP)

Į aspektus orientuotas programavimas (AOP) yra programavimo paradigma, leidžianti modularizuoti skerspjūvio problemas, tokias kaip registravimas, saugumas ir transakcijų valdymas. Aspektas yra modulis, kuris apgaubia šias skerspjūvio problemas.

AOP privalumai

Pavyzdys: AOP naudojimas registravimui


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LoggingAspect {

    private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);

    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        logger.info("Method " + joinPoint.getSignature().getName() + " called");
    }
}

Šis pavyzdys apibrėžia aspektą, kuris registruoja pranešimą prieš vykdant bet kurį metodą `com.example.service` pakete. `@Before` anotacija nurodo taikymo tašką (pointcut), kuris nustato, kada turi būti vykdomas patarimas (advice) (registravimo logika).

Spring Data

„Spring Data“ suteikia nuoseklų ir supaprastintą požiūrį į duomenų prieigą, palaikydamas įvairius duomenų šaltinius, įskaitant reliacines duomenų bazes, NoSQL duomenų bazes ir pranešimų eiles. Ji abstrahuoja didelę dalį standartinio kodo, susijusio su sąveika su duomenų baze, leisdama programuotojams susitelkti ties verslo logika.

Pagrindiniai „Spring Data“ moduliai

Pavyzdys: „Spring Data JPA“ naudojimas


@Repository
public interface ProductRepository extends JpaRepository {
    List findByNameContaining(String name);
}

Šis pavyzdys parodo, kaip sukurti paprastą repozitorijos sąsają naudojant „Spring Data JPA“. `JpaRepository` sąsaja suteikia įprastas CRUD (Create, Read, Update, Delete) operacijas. Taip pat galite apibrėžti pasirinktinius užklausų metodus, laikydamiesi pavadinimų suteikimo konvencijos arba naudodami `@Query` anotaciją.

Spring Security

„Spring Security“ yra galingas ir labai pritaikomas autentifikavimo ir autorizavimo karkasas Java programoms. Jis suteikia išsamias saugumo funkcijas, įskaitant autentifikavimą, autorizavimą, apsaugą nuo įprastų interneto atakų ir kt.

Pagrindinės „Spring Security“ savybės

Pavyzdys: REST API apsauga su „Spring Security“


@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
            .and()
            .httpBasic();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("{noop}password").roles("USER");
    }
}

Šis pavyzdys konfigūruoja „Spring Security“ taip, kad būtų reikalaujama autentifikacijos visoms užklausoms, išskyrus tas, kurios skirtos `/public/**` galiniams taškams. Jis taip pat apibrėžia atmintyje esantį vartotoją su vartotojo vardu „user“ ir slaptažodžiu „password“.

Pažangios Spring kūrimo technikos

Mikropaslaugų architektūra su „Spring Cloud“

Mikropaslaugų architektūra yra programinės įrangos kūrimo metodas, kuris struktūrizuoja programą kaip mažų, autonomiškų paslaugų rinkinį, modeliuojamą pagal verslo domeną. „Spring Cloud“ suteikia įrankių ir bibliotekų rinkinį, skirtą kurti mikropaslaugomis pagrįstas programas su „Spring Boot“.

Pagrindiniai „Spring Cloud“ komponentai

Reaktyvusis programavimas su „Spring WebFlux“

Reaktyvusis programavimas yra programavimo paradigma, kuri nagrinėja asinchroninius duomenų srautus ir pokyčių sklidimą. „Spring WebFlux“ yra reaktyvusis interneto karkasas, sukurtas ant „Reactor“ pagrindo – reaktyviosios bibliotekos, skirtos Java.

Reaktyviojo programavimo privalumai

Spring programų testavimas

Testavimas yra esminė programinės įrangos kūrimo proceso dalis. Spring suteikia puikų palaikymą vienetiniam ir integraciniam testavimui.

Testų tipai

Įrankiai Spring programų testavimui

Geriausios Spring kūrimo praktikos

Spring kūrimas pasauliniame kontekste

Spring kūrimas yra plačiai pritaikomas visame pasaulyje. Kuriant Spring programas pasaulinei auditorijai, svarbu atsižvelgti į šiuos dalykus:

Pavyzdžiui, rodydami datą vartotojui Jungtinėse Amerikos Valstijose, galite naudoti formatą `MM/dd/yyyy`, o vartotojas Europoje gali tikėtis formato `dd.MM.yyyy`. Panašiai, skaičius kai kuriose šalyse gali būti formatuojamas su kableliu kaip dešimtainiu skyrikliu, o kitose – su tašku.

Spring kūrimo ateitis

„Spring Framework“ toliau vystosi ir prisitaiko prie kintančios programinės įrangos kūrimo aplinkos. Kai kurios pagrindinės Spring kūrimo tendencijos apima:

Išvada

„Spring Framework“ yra galingas ir universalus įrankis kuriant verslo Java programas. Įvaldę šiame vadove aptartas pagrindines koncepcijas, geriausias praktikas ir pažangias technikas, galite tapti įgudusiu Spring programuotoju ir kurti aukštos kokybės, keičiamo dydžio bei lengvai prižiūrimas programas. Nuolat mokykitės, sekite naujausias tendencijas ir pasinaudokite „Spring“ ekosistemos galia.