본문 바로가기
✨ Back-end/Spring-Legacy

[Spring-Legacy] 스프링 레거시 XML에서 빈(Bean) 정의해보기

by 환풍 2023. 8. 22.
728x90
반응형

 

스프링 레거시란?

XML- based configuration
스프링 초기 버전에서 주로 XML 파일을 사용해 애플리케이션의 구성과 설정을 정의했다.

스프링 레거시 방식에서는 주로 ~~.xml과 같은 이름의 XML 파일을 생성하고,

이 파일 내에서 빈(Bean)정의, 의존성 주입(Dependency Injection), AOP 설정, 데이터소스 설정 등을 작성한다.

 

Person 객체

Spring-legacy에서 Person이라는 객체를 만들어 생성자와 기본생성자, setter, getter를 만들어주었다.

 

person.xml

  • <bean> : 빈을 정의하는 태그이다.
  • id : 빈의 고유한 식별자를 지정한다. 이 ID를 통해 빈을 참조할 수 있다.
  • class : 생성할 빈의 클래스 경로를 지정한다.
  • scope : 빈의 스코프를 설정한다. 지정하지 않으면 기본값으로 singleton이며, singleton은 하나의 인스턴스만 생성하여 공유한다.
  • p:name, p:age, p:address : <bean> 태그 내부에 있는 <property> 태그이다. p :는 프로퍼티의 값을 지정하는 축약형 표기법이다.
  • name, age, address : 프로퍼티의 이름이다. 빈 클래스 내에서 해당 이름과 일치하는 setter 메서드를 찾아 값을 주입한다.
  • name : 프로퍼티의 이름을 지정한다. 해당 이름과 일치하는 setter 메서드를 찾아 값을 주입한다.
  • value : 프로퍼티에 주입될 값을 지정한다.
  • <property> : 빈의 프로퍼티를 설정하는 태그이다.
  • <constructor-arg> : 생성자 주입(Constructor Injection)을 통해 빈의 프로퍼티 값을 설정하는 태그이다.
  • index : 생성자의 파라미터 인덱스를 지정한다.
  • type : 생성자의 파라미터 타입을 지정한다.

 

<bean id ="person1">

이 빈은 singleton 스코프로 정의되므로, 하나의 인스턴스가 생성되고 공유된다.

 

 

<bean id="person2">

이 빈은 prototype 스코프로 정의되므로, 요청할 때 마다 새로운 인스턴스가 생성된다.

 

<bean id="person3">

이 코드는 person3라는 ID를 가진 Person 클래스의 인스턴스를 생성한다.

 

PersonMain

1. ApplicationContext context = new FileSystemXmlApplicationContext("경로/Person.xml");

FileSystemXmlApplicationContext 클래스를 사용하여 XML 파일을 로드하고 스프링의 ApplicationContext를 생성한다.

 

2. Person person = context.getBean("person1", Person.class);

 "person1"이라는 ID를 가진 빈을 context에서 가져온다. 두 번째 인자로 빈의 클래스 타입을 지정하여 해당 빈을 캐스팅.

 

3. System.out.println(person);

 person 빈의 정보를 출력한다. 이 코드는 Person 클래스의 toString 메서드를 호출하여 객체의 문자열 표현을 출력한다.

 

위와 같은 방법으로 person2와 person3도 출력한 결과가 콘솔창에 나타나있다.

 


PersonCollection

이번에는 bean 객체에 여러 컬렉션들을 넣어 생성해보았다.

 

person.xml

bean 객체안에 list, set, properties, map 이렇게 4가지 컬렉션이있다.

 

1. list

  •  <list> : List 컬렉션을 설정하는 태그
  • <ref bean ="..."> : 다른 빈을 참조하는 태그로, 해당 빈의 ID를 사용하여 다른 빈과의 관계를 설정

2. set

  • <set> : Set 컬렉션을 설정하는 태그

3. properties

  • <props> : 프로퍼티 컬렉션을 설정하는 태그
  • <prop key = "...." > : 프로퍼티 컬렉션에서 사용되며, 키와 값을 지정하여 맵 형태로 값을 설정

4. map

  • <map> : 맵 컬렉션을 설정하는 태그
  • <entry> : 맵 컬렉션에서 사용되며, 키와 값을 가지는 하나의 항목
  • <key> , <value> : 맵 컬렉션에서 각 항목의 키와 값을 설정하는 태그

 

PersonMain

1. PersonCollection pc = context.getBean("pCollection", PersonCollection.class);

 스프링 컨테이너로부터 "pCollection" ID를 가진 PersonCollection 빈을 가져온다.

 

2. for (Person p : pc.getList()) { ... }

PersonCollection의 List 컬렉션을 가져와서 Person 객체들을 반복하여 출력한다.

 

3. Iterator<Person> it = pc.getSet().iterator();

 PersonCollection의 Set 컬렉션을 가져와서 반복자(Iterator)를 생성한다.

 

4. while (it.hasNext()) { ... }

Set 컬렉션을 순회하면서 각각의 Person 객체를 출력한다.

 

5. Properties pt = pc.getProperties();

PersonCollection의 Properties 컬렉션을 가져온다.

 

6. Iterator<Entry<Object, Object>> iter = pt.entrySet().iterator();

Properties 컬렉션의 엔트리(키-값 쌍)들을 가져와서 엔트리의 반복자(Iterator)를 생성한다.

 

7. while (iter.hasNext()) { ... }

Properties 컬렉션의 엔트리들을 순회하면서 키와 값을 출력한다.

 

 

728x90
반응형

댓글