Spring 공략 학습 노트 (13) --- Bean 설정 계승
5698 단어 spring
Spring IoC 용기 에 Bean 을 설정 할 때 속성 과 < bean > 요소 의 속성 등 일부 공용 설정 을 공유 하 는 Bean 을 하나 이상 가 질 수 있 습 니 다.너 는 항상 여러 빈 을 위해 이 설정 들 을 반복 해 야 한다.
Spring 은 공용 Bean 설정 을 추출 하여 부모 Bean 을 구성 할 수 있 도록 합 니 다.아버지 빈 에 게 서 물 려 받 은 빈 을 자 빈 이 라 고 부른다.하위 Bean 은 부모 Bean 에서 Bean 설정 을 계승 합 니 다. Bean 속성 과 < bean > 요소 의 속성 을 포함 하여 중복 설정 을 피 합 니 다.서브 빈 은 필요 할 때 계승 설정 을 덮어 쓸 수 있 습 니 다.
부모 빈 은 설정 템 플 릿 으로 도 사용 할 수 있 고 빈 의 인 스 턴 스 로 도 사용 할 수 있 습 니 다.부모 빈 이 템 플 릿 으로 만 검색 할 수 없 기 를 원한 다 면 abstract 를 true 로 설정 하고 Spring 에 이 빈 을 예화 하지 말 라 고 요구 해 야 합 니 다.
부모 < bean > 요소 에서 정의 하 는 모든 속성 이 계승 되 는 것 은 아 닙 니 다.구체 적 으로 는 Spring 문서 의 Bean 계승 에 관 한 내용 을 참조 할 수 있 습 니 다.
2. 코드 예시:
Bean 프로필:
<bean id="sequenceGenerator" class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator" >
<property name="initial" value="100000" />
<property name="suffix" value="A" />
<property name="prefixGenerator" ref="datePrefixGenerator" />
</bean>
<bean id="sequenceGenerator1" class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator" >
<property name="initial" value="100000" />
<property name="suffix" value="A" />
<property name="prefixGenerator" ref="datePrefixGenerator" />
</bean>
<bean id="datePrefixGenerator" class="com.jackie.codeproject.springrecipesnote.springioc.DatePrefixGenerator">
<property name="pattern" value="yyyyMMdd" />
</bean>
같은 속성 이 중복 되 는 것 을 피하 기 위해 서 는 이 속성 집합 으로 기본 시퀀스 생 성 기 를 설명 할 수 있 습 니 다.그 다음 에 두 개의 시퀀스 생 성 기 는 이 기본 시퀀스 생 성기 에서 계승 할 수 있 습 니 다. 그러면 그들 은 자동 으로 어떤 속성 집합 을 가지 고 있 습 니까?하위 빈 과 부모 빈 의 클 라 스 속성 이 같다 면 지정 할 필요 가 없습니다.
<bean id="baseSequenceGenerator" class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator" >
<property name="initial" value="100000" />
<property name="suffix" value="A" />
<property name="prefixGenerator" ref="datePrefixGenerator" />
</bean>
<bean id="sequenceGenerator" parent="baseSequenceGenerator" />
<bean id="sequenceGenerator1" parent="baseSequenceGenerator" />
계승 속성 은 하위 빈 이 덮어 쓸 수 있 습 니 다.예 를 들 어 초기 값 이 다른 하위 시퀀스 생 성 기 를 추가 할 수 있 습 니 다.
<bean id="baseSequenceGenerator" class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator" >
<property name="initial" value="100000" />
<property name="suffix" value="A" />
<property name="prefixGenerator" ref="datePrefixGenerator" />
</bean>
<bean id="sequenceGenerator2" parent="baseSequenceGenerator" >
<property name="initial" value="200000"></property>
</bean>
현재 기본 시퀀스 생 성기 빈 은 빈 인 스 턴 스 로 복원 할 수 있 습 니 다.템 플 릿 으로 만 사용 하려 면 abstract 속성 을 true 로 설정 해 야 합 니 다. Spring 은 이 Bean 을 예화 하지 않 습 니 다. 그렇지 않 으 면 이상 을 던 집 니 다.
<bean id="baseSequenceGenerator" abstract="true" class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator" >
<property name="initial" value="100000" />
<property name="suffix" value="A" />
<property name="prefixGenerator" ref="datePrefixGenerator" />
</bean>
너 도 아버지 빈 의 종 류 를 무시 하고 아들 빈 에 게 자신의 종 류 를 지정 하 게 할 수 있다. 특히 아버지 빈 과 아들 빈 이 같은 계층 구조 에 있 지 않 지만 같은 이름 의 속성 을 공유 할 때.이 경우 부모 빈 의 abstract 속성 은 true 로 설정 해 야 합 니 다. 부모 빈 은 예화 할 수 없 기 때 문 입 니 다.예 를 들 어 initial 속성 이 있 는 ReverseGenerator 클래스 를 추가 합 니 다.
public class ReverseGenerator {
private int initial;
public void setInitial(int initial) {
this.initial = initial;
}
}
현재 Sequence Generator 와 ReverseGenerator 는 같은 기본 클래스 를 확장 하지 않 습 니 다. 즉, 그들 은 같은 계층 기구 에 있 지 않 지만 같은 이름 의 속성 을 가지 고 있 습 니 다: initial.공공 initial 속성 을 추출 하기 위해 서 는 class 속성 을 정의 하지 않 은 부모 Bean - --- - baseGenerator 가 필요 합 니 다.
<bean id="baseGenerator" abstract="true">
<property name="initial" value="100000" />
</bean>
<bean id="baseSequenceGenerator" abstract="true" parent="baseGenerator" >
<property name="suffix" value="A" />
<property name="prefixGenerator" ref="datePrefixGenerator" />
</bean>
<bean id="reverseGenerator" parent="baseGenerator" class="com.jackie.codeproject.springrecipesnote.springioc.ReverseGenerator" />
<bean id="sequenceGenerator" parent="baseSequenceGenerator" />
<bean id="sequenceGenerator1" parent="baseSequenceGenerator" />
<bean id="sequenceGenerator2" parent="baseSequenceGenerator" />
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.