Spring @Primary Annotation

1. Prehľad

V tomto rýchlom výučbe si povieme niečo o jarných @Primárny anotácia, ktorá bola uvedená do verzie 3.0 rámca.

Jednoducho povedané, používame @Primárny dať fazuľke vyššiu prednosť, ak existuje viac fazúľ rovnakého typu.

Popíšme si problém podrobne.

2. Prečo je @Primárny Potrebné?

V niektorých prípadoch, musíme zaregistrovať viac ako jednu fazuľu rovnakého typu.

V tomto príklade máme JohnEmployee () a TonyEmployee () fazuľa Zamestnanec typ:

@Configuration public class Config {@Bean public Employee JohnEmployee () {return new Employee ("John"); } @Bean public Employee TonyEmployee () {return new Employee ("Tony"); }}

Jarné hody NoUniqueBeanDefinitionException ak sa pokúsime aplikáciu spustiť.

Na prístup k fazuli rovnakého typu, aký obvykle používame @Qualifier („názov fazule“) anotácia.

Aplikujeme ho v mieste vpichu spolu s @Autowired. V našom prípade vyberieme fazuľu vo fáze konfigurácie tak @Qualifier tu nie je možné použiť. Môžeme sa dozvedieť viac o @Qualifier anotáciu kliknutím na odkaz.

Na vyriešenie tohto problému ponúka jar @Primárny anotácia.

3. Použite @Primárny S @Bean

Poďme sa pozrieť na konfiguračnú triedu:

@Configuration public class Config {@Bean public Employee JohnEmployee () {return new Employee ("John"); } @Bean @Primary public Employee TonyEmployee () {return new Employee ("Tony"); }}

Označíme TonyEmployee () fazuľa s @Primárny. Jar vstrekne TonyEmployee () fazuľa prednostne pred JohnEmployee ().

Teraz začnime kontext aplikácie a získajme Zamestnanec fazuľa z toho:

AnnotationConfigApplicationContext context = nový AnnotationConfigApplicationContext (Config.class); Zamestnanec zamestnanec = context.getBean (Employee.class); System.out.println (zamestnanec);

Po spustení aplikácie:

Zamestnanec {name = 'Tony'}

Z výstupu vidíme, že TonyEmployee () inštancia má prednosť pri automatickom zapojení.

4. Použite @Primárny S @ Komponent

@Primary môžeme použiť priamo na fazuľu. Pozrime sa na nasledujúci scenár:

manažér verejného rozhrania {String getManagerName (); }

Máme Manažér rozhranie a dve podtriedy fazule, DepartmentManager:

@Component public class DepartmentManager implementuje Manager {@Override public String getManagerName () {return "Department manager"; }}

A Generálny riaditeľ fazuľa:

@Component @Primary verejná trieda GeneralManager implementuje Manager {@Override public String getManagerName () {return "General manager"; }}

Oba majú prednosť pred getManagerName () z Manažér rozhranie. Upozorňujeme tiež, že označujeme Generálny riaditeľ fazuľa s @Primárny.

Tentokrát, @Primárny má zmysel iba vtedy, keď povolíme skenovanie komponentov:

@Configuration @ComponentScan (basePackages = "org.baeldung.primary") konfigurácia verejnej triedy {}

Poďme vytvoriť službu na použitie vkladania závislostí pri hľadaní správneho fazule:

@Service verejná trieda ManagerService {@Autowired private Manager manager; public Manager getManager () {návratový manažér; }}

Tu obe fazule DepartmentManager a Generálny riaditeľ majú nárok na automatické zapojenie.

Ako sme označili Generálny riaditeľ fazuľa s @Primárny, bude vybraný pre vkladanie závislostí:

Služba ManagerService = context.getBean (ManagerService.class); Manažér manažér = service.getManager (); System.out.println (manager.getManagerName ());

Výstup je „Generálny riaditeľ".

5. Záver

V tomto článku sme sa dozvedeli niečo o jarných @Primárny anotácia. Na príkladoch kódu sme demonštrovali potrebu a prípady použitia @Primárny.

Úplný kód tohto článku je ako obvykle k dispozícii na webe GitHub.


$config[zx-auto] not found$config[zx-overlay] not found