봄-빈 정의 상속
Bean 정의에는 생성자 인수, 속성 값 및 초기화 메서드, 정적 팩토리 메서드 이름 등과 같은 컨테이너 관련 정보를 비롯한 많은 구성 정보가 포함될 수 있습니다.
하위 Bean 정의는 상위 정의에서 구성 데이터를 상속합니다. 하위 정의는 필요에 따라 일부 값을 재정의하거나 다른 값을 추가 할 수 있습니다.
Spring Bean 정의 상속은 Java 클래스 상속과 관련이 없지만 상속 개념은 동일합니다. 상위 Bean 정의를 템플리트로 정의 할 수 있으며 다른 하위 Bean은 상위 Bean에서 필요한 구성을 상속 할 수 있습니다.
XML 기반 구성 메타 데이터를 사용하는 경우 다음을 사용하여 하위 Bean 정의를 표시합니다. parent 이 속성의 값으로 상위 Bean을 지정하는 속성.
예
작동하는 Eclipse IDE를 준비하고 다음 단계를 수행하여 Spring 애플리케이션을 작성해 보겠습니다.
단계 | 기술 |
---|---|
1 | 이름이 SpringExample 인 프로젝트를 만들고 아래에 com.tutorialspoint 패키지를 만듭니다 .src 생성 된 프로젝트의 폴더. |
2 | Spring Hello World 예제 장에 설명 된대로 Add External JARs 옵션을 사용하여 필요한 Spring 라이브러리를 추가하십시오 . |
삼 | com.tutorialspoint 패키지 아래에 Java 클래스 HelloWorld , HelloIndia 및 MainApp을 만듭니다 . |
4 | 아래에 Beans 구성 파일 Beans.xml을 만듭니다 .src 폴더. |
5 | 마지막 단계는 모든 Java 파일과 Bean 구성 파일의 내용을 만들고 아래 설명 된대로 응용 프로그램을 실행하는 것입니다. |
다음은 구성 파일입니다. Beans.xml여기서 우리는 message1 과 message2 두 가지 속성을 가진 "helloWorld"빈을 정의했습니다 . 다음으로 "helloIndia"bean은 다음을 사용하여 "helloWorld"bean의 자식으로 정의되었습니다.parent속성. 자식 bean 은 message2 속성을 그대로 상속 하고 message1 속성을 재정의 하고 message3 속성을 하나 더 도입 합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld">
<property name = "message1" value = "Hello World!"/>
<property name = "message2" value = "Hello Second World!"/>
</bean>
<bean id ="helloIndia" class = "com.tutorialspoint.HelloIndia" parent = "helloWorld">
<property name = "message1" value = "Hello India!"/>
<property name = "message3" value = "Namaste India!"/>
</bean>
</beans>
내용은 다음과 같습니다. HelloWorld.java 파일-
package com.tutorialspoint;
public class HelloWorld {
private String message1;
private String message2;
public void setMessage1(String message){
this.message1 = message;
}
public void setMessage2(String message){
this.message2 = message;
}
public void getMessage1(){
System.out.println("World Message1 : " + message1);
}
public void getMessage2(){
System.out.println("World Message2 : " + message2);
}
}
내용은 다음과 같습니다. HelloIndia.java 파일-
package com.tutorialspoint;
public class HelloIndia {
private String message1;
private String message2;
private String message3;
public void setMessage1(String message){
this.message1 = message;
}
public void setMessage2(String message){
this.message2 = message;
}
public void setMessage3(String message){
this.message3 = message;
}
public void getMessage1(){
System.out.println("India Message1 : " + message1);
}
public void getMessage2(){
System.out.println("India Message2 : " + message2);
}
public void getMessage3(){
System.out.println("India Message3 : " + message3);
}
}
다음은의 내용입니다 MainApp.java 파일-
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
objA.getMessage1();
objA.getMessage2();
HelloIndia objB = (HelloIndia) context.getBean("helloIndia");
objB.getMessage1();
objB.getMessage2();
objB.getMessage3();
}
}
소스 및 빈 구성 파일 생성이 완료되면 애플리케이션을 실행 해 보겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
World Message1 : Hello World!
World Message2 : Hello Second World!
India Message1 : Hello India!
India Message2 : Hello Second World!
India Message3 : Namaste India!
여기에서 살펴보면 "helloIndia"bean을 생성하는 동안 message2를 전달하지 않았지만 Bean Definition Inheritance 때문에 전달되었습니다.
빈 정의 템플릿
많은 노력을 기울이지 않고 다른 자식 빈 정의에서 사용할 수있는 빈 정의 템플릿을 만들 수 있습니다. Bean 정의 템플릿을 정의하는 동안 다음을 지정해서는 안됩니다.class 속성을 지정해야합니다. abstract 속성 값으로 추상 속성을 지정해야합니다. true 다음 코드 스 니펫에서 볼 수 있듯이-
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "beanTeamplate" abstract = "true">
<property name = "message1" value = "Hello World!"/>
<property name = "message2" value = "Hello Second World!"/>
<property name = "message3" value = "Namaste India!"/>
</bean>
<bean id = "helloIndia" class = "com.tutorialspoint.HelloIndia" parent = "beanTeamplate">
<property name = "message1" value = "Hello India!"/>
<property name = "message3" value = "Namaste India!"/>
</bean>
</beans>
부모 빈은 불완전하기 때문에 자체적으로 인스턴스화 할 수 없으며 명시 적으로 abstract 로 표시됩니다 . 정의가 이와 같이 추상적 인 경우 하위 정의에 대한 상위 정의 역할을하는 순수한 템플릿 Bean 정의로만 사용할 수 있습니다.