Proljeće @ Primarna bilješka

1. Pregled

U ovom brzom vodiču razgovarat ćemo o Springu @ Primarno napomena koja je uvedena s verzijom 3.0 okvira.

Jednostavno rečeno, koristimo @ Primarno da daju veću prednost grahu kada postoji više graha iste vrste.

Opišimo detaljno problem.

2. Zašto je @ Primarno Potrebno?

U nekim slučajevima, moramo registrirati više graha istog tipa.

U ovom primjeru imamo JohnEfficiee () i TonyEfficiee () grah od Zaposlenik tip:

@Configuration javna klasa Config {@Bean public Employee JohnEfficiee () {return new Employee ("John"); } @Bean public Employee TonyEfficiee () {return new Employee ("Tony"); }}

Proljetna bacanja NoUniqueBeanDefinitionException ako pokušamo pokrenuti aplikaciju.

Za pristup grahu iste vrste koji obično koristimo @Qualifier (“beanName”) bilješka.

Primjenjujemo ga na mjestu ubrizgavanja zajedno sa @Autowired. U našem slučaju, grah odabiremo u fazi konfiguracije tako @Kvalifikator ovdje se ne može primijeniti. Možemo saznati više o @Kvalifikator napomena slijedeći vezu.

Za rješavanje ovog problema Spring nudi @ Primarno bilješka.

3. Koristite @ Primarno S @Grah

Pogledajmo klasu konfiguracije:

@Configuration javna klasa Config {@Bean public Employee JohnEfficiee () {return new Employee ("John"); } @Bean @Primary public Employee TonyE Employee () {return new Employee ("Tony"); }}

Označavamo TonyEfficiee () grah sa @ Primarno. Proljeće će ubrizgati TonyEfficiee () grah preferirano nad JohnEfficiee ().

Sada, pokrenimo kontekst aplikacije i uzmimo Zaposlenik grah od njega:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext (Config.class); Zaposlenik zaposlenik = context.getBean (Employee.class); System.out.println (zaposlenik);

Nakon što pokrenemo aplikaciju:

Zaposlenik {name = 'Tony'}

Iz rezultata možemo vidjeti da je TonyEfficiee () instanca ima prednost tijekom automatskog povezivanja.

4. Koristite @ Primarno S @Komponenta

@Primary možemo koristiti izravno na grahu. Pogledajmo sljedeći scenarij:

upravitelj javnog sučelja {String getManagerName (); }

Imamo Menadžer sučelje i dva grana podrazreda, Voditelj odjela:

@Component javna klasa DepartmentManager implementira Manager {@Override public String getManagerName () {return "Manager manager"; }}

I GeneralManager grah:

@Component @Primary javna klasa GeneralManager implementira Manager {@Override public String getManagerName () {return "General manager"; }}

Oboje nadjačavaju getManagerName () od Menadžer sučelje. Također imajte na umu da označavamo GeneralManager grah sa @ Primarno.

Ovaj put, @ Primarno ima smisla samo kad omogućimo skeniranje komponenata:

@Configuration @ComponentScan (basePackages = "org.baeldung.primary") konfiguracija javne klase {}

Stvorimo uslugu koja će koristiti injekciju ovisnosti dok pronalazimo pravi grah:

@Service javna klasa ManagerService {@Automobilski privatni upravitelj upravitelja; javni upravitelj getManager () {return manager; }}

Evo, oba graha Voditelj odjela i GeneralManager ispunjavaju uvjete za automatsko ožičenje.

Kao što smo obilježili GeneralManager grah sa @ Primarno, bit će odabran za injekciju ovisnosti:

Usluga ManagerService = context.getBean (ManagerService.class); Voditelj upravitelja = service.getManager (); System.out.println (manager.getManagerName ());

Izlaz je "Generalni direktor ”.

5. Zaključak

U ovom smo članku saznali više o Springu @ Primarno bilješka. Primjerima koda pokazali smo potrebu i slučajeve upotrebe @ Primarno.

Kao i obično, cjeloviti kôd za ovaj članak dostupan je na GitHub projektu.


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