Tavasz @ Elsődleges kommentár
1. Áttekintés
Ebben a gyors bemutatóban megvitatjuk a tavaszit @Elsődleges megjegyzés, amelyet a keretrendszer 3.0 verziójával vezettek be.
Egyszerűen fogalmazva, használunk @Elsődleges nagyobb előnyben részesíteni a babot, ha több azonos típusú bab van.
Írjuk le részletesen a problémát.
2. Miért van @Elsődleges Szüksége van?
Egyes esetekben, több, azonos típusú babot kell regisztrálnunk.
Ebben a példában van JohnEmployee () és TonyEmployee () bab a Munkavállaló típus:
@Configuration public class Config {@Bean public Employee JohnEmployee () {return new Employee ("John"); } @Bean állami alkalmazott TonyEmployee () {return new Employee ("Tony"); }}
Tavaszi dobások NoUniqueBeanDefinitionException ha megpróbáljuk futtatni az alkalmazást.
Azokhoz a babokhoz való hozzáféréshez, amelyeket általában használunk @Qualifier („beanName”) annotáció.
Az injekciós ponton együtt alkalmazzuk @Autowired. Esetünkben a babot a konfigurációs szakaszban választjuk ki @ Minősítő itt nem lehet alkalmazni. Többet megtudhatunk @ Minősítő annotáció a link követésével.
A probléma megoldása érdekében a Spring felajánlja a @Elsődleges annotáció.
3. Használja @Elsődleges Val vel @Bab
Vessünk egy pillantást a konfigurációs osztályra:
@Configuration public class Config {@Bean public Employee JohnEmployee () {return new Employee ("John"); } @Bean @ Elsődleges állami alkalmazott TonyEmployee () {return new Employee ("Tony"); }}
Megjelöljük TonyEmployee () bab @Elsődleges. A tavasz beadja TonyEmployee () bab elsődlegesen a JohnEmployee ().
Indítsuk el az alkalmazás kontextust, és kapjuk meg a Munkavállaló bab belőle:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext (Config.class); Alkalmazott alkalmazott = context.getBean (Employee.class); System.out.println (alkalmazott);
Az alkalmazás futtatása után:
Alkalmazott {name = 'Tony'}
A kimenetből láthatjuk, hogy a TonyEmployee () példány előnyben részesíti az automatikus vezetékezést.
4. Használja @Elsődleges Val vel @Összetevő
A @Primary-t közvetlenül a babra használhatjuk. Vessünk egy pillantást a következő forgatókönyvre:
nyilvános felületkezelő {String getManagerName (); }
Nekünk van Menedzser interfész és két alosztály bab, Osztály vezetője:
@Component public class DepartmentManager végrehajtja a Manager {@Orride public String getManagerName () {return "Department manager"; }}
És a GeneralManager bab:
@Component @Primary public class A GeneralManager végrehajtja a Manager {@Orride public String getManagerName () {return "General manager"; }}
Mindkettő felülírja a getManagerName () a Menedzser felület. Ezenkívül vegye figyelembe, hogy jelöljük a GeneralManager bab @Elsődleges.
Ezúttal, @Elsődleges csak akkor van értelme, ha engedélyezzük az alkatrész-vizsgálatot:
@Configuration @ComponentScan (basePackages = "org.baeldung.primary") public class Config {}
Hozzunk létre egy szolgáltatást a függőség-injektálás használatához, miközben megtaláljuk a megfelelő babot:
@Service public class ManagerService {@Autowired private manager manager; public manager getManager () {return manager; }}
Itt mindkét bab Osztály vezetője és GeneralManager jogosultak az automatikus vezetésre.
Ahogy megjelöltük GeneralManager bab @Elsődleges, a függőségi injekcióhoz kerül kiválasztásra:
ManagerService szolgáltatás = context.getBean (ManagerService.class); Menedzser menedzser = service.getManager (); System.out.println (manager.getManagerName ());
A kimenetVezérigazgató ”.
5. Következtetés
Ebben a cikkben megismerhettük a Spring's-t @Elsődleges annotáció. A kód példákkal megmutattuk a. Igényét és felhasználási eseteit @Elsődleges.
Szokás szerint a cikk teljes kódja elérhető a GitHub projekten.