스프링 컨테이너에서는 <ref>를 통한 종속성을 설정하는 것 외에도 두 콩 사이에 특별한 관계가 있습니다.
1 상속
객체 지향 프로그래밍 원칙에서, 여러 클래스가 동일한 메소드 및 속성을 갖는 경우, 중복 코드를 제거하기 위해 부모 클래스를 소개 할 수 있습니다. 스프링 컨테이너에서 여러 콩에 동일한 구성 정보가있는 경우, 아동 Bean이 부모 Bean의 구성 정보를 자동으로 상속받을 수 있도록 부모 Bean을 정의 할 수 있습니다.
<!-부모 bean-> <bean id = "AbstractBook"p : name = "Veil"actract = "true"> </bean> <!-child bean-> <bean id = "book1"p : press = "chongqing publishing house"parent = "actractbook"/> <bean id = "book2"p : press = "shanghai translation house"parents "/>
일반적으로, 부모 Bean의 기능은 Child Bean의 구성을 단순화하는 것이므로 Abstract 클래스로 설정됩니다 (Abstract = "True"). 부모 콩이 여기에서 추상 클래스로 설정되지 않으면 스프링 컨테이너는 부모 Bean을 인스턴스화합니다.
2 선의 의존
일반적으로 <ref>는 콩 사이의 종속성을 설정하는 데 사용됩니다. 스프링 컨테이너는 이러한 관계를 관리 할 책임이 있습니다. 콩을 인스턴스화 할 때 컨테이너는 모든 콩이 콩에 의존하여 초기화 작업을 완료했습니다.
그러나 어떤 경우에는 콩 사이의 의존성이 그다지 명백하지 않습니다.
이 시나리오에서 시스템이 일부 시스템 매개 변수 (예 : 비밀번호 유효성 기간, 모니터링을 활성화할지 등)를 설정하고 이러한 시작 매개 변수는 시스템의 작동 로직을 제어하는 데 사용됩니다. 설정 클래스를 사용하여 이러한 매개 변수를 나타냅니다.
공개 클래스 설정 { / ** * 비밀번호 만료 시간 (단위 : days) * / public static int pass_timeout = 30; / *** 모니터링을 활성화할지*/ public static boolean is_monitor = false;}여기서 우리는이 매개 변수의 기본값을 설정합니다. 시스템에는 관리자 가이 시스템 매개 변수를 조정하여 데이터베이스에 저장할 수있는 관리 백엔드가 있습니다. 따라서 응용 프로그램이 시작되면 이러한 시스템 매개 변수를 데이터베이스에서로드해야합니다.
공개 클래스 시스템 {public system () {init (); } /*** 초기화* /private void init () {//이 값이 데이터베이스 settings.pass_timeout = 20; settings.is_monitor = true; }}시스템에는 비밀번호 만료 관리자가 있으며,이 작업은 시스템 매개 변수에서 암호가 [비밀번호가 만료되는 날 수]를 기준으로 비밀번호가 만료되는지 여부를 감지 할 시간이 지정된 작업을 만듭니다.
공개 클래스 PassManager {int timeout; public passmanager () {timeout = settings.pass_timeout; 타이머 스탁 (); } / *** 비밀번호가 만료되는지 여부를 감지하는 시간이 정한 작업* / private void timertask () {} public int gettimeout () {return timeout; }}PassManager는 설정에 직접 의존하지 않지만 논리적으로 PassManager는 시스템이 시작하기 전에 초기화 된 시스템 매개 변수를로드 할 것으로 기대합니다.
봄에는 종속 속성을 통해 콩의 사전 의존 콩을 명시 적으로 지정 하여이 콩의 사전 의존 콩이 인스턴스화 전에로드되었는지 확인할 수 있습니다.
<bean id = "system"/> <bean id = "manager"의 종속-온 = "System"/>
접두사가 여러 콩에 의존하면 콩 이름을 쉼표, 공간 또는 세미콜론으로 구성 할 수 있습니다.
3 인용 ID
Bean이 다른 Bean의 ID 값 (Beaname)을 참조해야한다고 가정합니다. 이것은 일반적으로 런타임 동안 Bean에서 GetBean (Beaname) 메소드를 통해 다른 Bean을 얻는 데 사용됩니다.
다음과 같이 구성 할 수 있습니다.
<bean id = "author"/> <bean id = "book"p : authorid = "author"/>
책에 추가 된 authorID 속성 :
/** * 저자 Bean ID */private String auderRid;
이 문자 그대로의 형태로 설정할 수 있지만 둘 사이에는 실제 참조 관계가 없습니다. 따라서 구성 오류는 특정 호출이 호출 된 경우에만 찾을 수 있습니다.
Spring은 <idref> 요소 태그를 제공하며 <idref>를 통해 다른 Bean의 이름을 참조합니다. 이런 식으로 컨테이너가 시작되면 참조 관계의 정확성을 확인하고 잘못된 구성 정보를 미리 찾을 수 있습니다.
<bean id = "author10"/> <bean id = "book10"> <property name = "authorId"> <idref bean = "author10"/> </property> </bean>
구성 오류가 발생하면 스프링 컨테이너가 시작될 때 BeanDefinitionStoreException이 발생하고 IDE의 XML 파서도 미리 참조 오류를 찾을 수 있으므로 <idref> 요소 태그를 사용하여 ID를 참조하는 것이 좋습니다.
요약
위는 편집자가 소개 한 스프링 콩 사이의 특별한 관계입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨주세요. 편집자는 제 시간에 당신에게 답장 할 것입니다!