Veiledning til Spring BeanFactory

1. Introduksjon

Denne artikkelen vil fokusere på å utforske Spring BeanFactory API.

BeanFactory-grensesnittet gir en enkel, men fleksibel konfigurasjonsmekanisme for å administrere objekter av hvilken som helst art via Spring IoC-containeren. La oss ta en titt på noen grunnleggende ting før vi dykker dypt inn i denne sentrale Spring API.

2. Grunnleggende - Bønner og beholdere

Enkelt sagt, bønner er java-objektene som danner ryggraden i en Spring-applikasjon og administreres av Spring IoC container. Annet enn å bli administrert av containeren, er det ikke noe spesielt med en bønne (i alle andre henseender er det en av mange objekter i applikasjonen).

Spring Container er ansvarlig for å sette i gang, konfigurere og montere bønnene. Containeren får informasjon om hvilke objekter som skal instansieres, konfigureres og administreres ved å lese konfigurasjonsmetadata vi definerer for applikasjonen.

3. Maven-avhengigheter

La oss legge til den nødvendige Maven-avhengigheten til pom.xml fil. Vi bruker Spring Beans avhengighet for å sette opp BeanFactory:

 org.springframework spring-beans 5.2.8.RELEASE 

4. Den BeanFactory Grensesnitt

Det er interessant å starte med å se på grensesnittdefinisjonen i org.springframework.beans.factory pakke og diskutere noen av de viktige API-ene her.

4.1. De getBean () APIer

Ulike versjoner av getBean () metoden returnerer en forekomst av den angitte bønnen, som kan deles eller være uavhengig av hele applikasjonen.

4.2. De inneholderBønne () API

Denne metoden bekrefter om denne bønnefabrikken inneholder en bønne med gitt navn. Mer spesifikt bekrefter den om getBean (java.lang.String) i stand til å skaffe en bønneinstans med gitt navn.

4.3. De isSingleton () API

De erSingleton API kan brukes til å spørre om denne bønnen er en delt singleton. Det er hvis getBean (java.lang.String) vil alltid returnere samme forekomst.

4.4. De isPrototype () API

Denne API-en vil bekrefte om getBean (java.lang.String) returnerer uavhengige forekomster - noe som betyr en bønne konfigurert med prototypens omfang, eller ikke.

Det viktige å merke seg er at denne metoden kommer tilbake falsk indikerer ikke tydelig et enkeltobjekt. Det indikerer ikke-uavhengige forekomster, som også kan tilsvare andre omfang.

Vi må bruke isSingleton (java.lang.String) operasjon for eksplisitt å se etter en delt singleton-forekomst.

4.5. Andre APIer

Mens isTypeMatch (strengnavn, klasse targetType) metoden sjekker om bønnen med det gitte navnet samsvarer med den angitte typen, getType (strengnavn) er nyttig for å identifisere typen bønne med gitt navn.

Endelig, getAliases (strengnavn) returner aliasene for det gitte bønnenavnet, hvis noen.

5. BeanFactory API

BeanFactory har bønnedefinisjoner og instantierer dem når klientapplikasjonen ber om det - noe som betyr:

  • Det tar vare på livssyklusen til en bønne ved å instantisere den og kalle passende destruksjonsmetoder
  • Den er i stand til å skape assosiasjoner mellom avhengig objekt mens den instantiseres
  • Det er viktig å peke på det BeanFactory støtter ikke den merknadsbaserte avhengighetsinjeksjonen mens ApplicationContext, gjør et supersett av BeanFactory

Les gjennom Application Context for å finne ut hva den kan gjøre ekstra.

6. Definere bønnen

La oss definere en enkel bønne:

offentlig klasse Ansatt {privat strengnavn; privat alder; // standardkonstruktører, getters og settere}

7. Konfigurere BeanFactory med XML

Vi kan konfigurere BeanFactory med XML. La oss lage en fil bønne-fabrikkeksempel.xml:

Merk at vi også har opprettet et alias for ansatt bønne.

8. BeanFactory med ClassPathResource

ClassPathResource tilhører org.springframework.core.io pakke. La oss kjøre en rask test og initialisere XmlBeanFactory ved hjelp av ClassPathResource som vist under:

public class BeanFactoryWithClassPathResourceTest {@Test public void createBeanFactoryAndCheckEmployeeBean () {Resource res = new ClassPathResource ("beanfactory-example.xml"); BeanFactory fabrikk = ny XmlBeanFactory (res); Employee emp = (Employee) factory.getBean ("ansatte"); assertTrue (fabrikk.isSingleton ("ansatt")); assertTrue (factory.getBean ("ansatt") forekomst av ansatt); assertTrue (fabrikk.isTypeMatch ("ansatt", ansatt.klasse)); assertTrue (factory.getAliases ("ansatt"). lengde> 0); }}

9. Konklusjon

I denne raske artikkelen lærte vi om hovedmetodene vår BeanFactory API-tilbud og et eksempel for å illustrere konfigurasjonen og bruken av den.

Koden som støtter disse eksemplene, er tilgjengelig på GitHub.