카테고리 없음

(4) xml을 통한 빈 등록과 BeanDefinition

샤샤샤샤 2023. 5. 10. 18:16

빈을 XML로도 등록이 가능하다, 이는 매우 귀찮고 최근에는 사용하지 않는 한물간 방식이다. 따라서 등록 원리에 대해서만 간단하게 설명하고 넘어가도록 하겠다.

 

ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");

AnnotationConfigApplicationContext() 처럼 GenericXmlApplicationContext를 사용해 xml파일을 넘기면, 해당 파일 내부에서 Bean으로 등록하도록 설정한 클래스들이 빈으로 등록된다.

 

아래의 xml파일을 보자.

 

<?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.xsd">

 <bean id="A"class="com.example.demo.noSpringDiTest.A" />
</beans>

id 는 빈이 등록되는 이름, class는 빈으로 등록할 클래스의 경로가 된다.

만약 빈으로 등록하려는 객체가 생성자 함수를 통해 매개변수를 주입받아야 하면 다음과 같이 설정 가능하다.

<?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.xsd">

 <bean id="A"class="com.example.demo.noSpringDiTest.A">
 	<constructor-arg name="(넘겨주는 매개변수)" ref="(Bean으로 등록된 매개변수 이름)" />
 </bean>
</beans>

 BeanDefinition

 자바 코드나 xml 파일이나 동이라헥 빈이 생성된다. 이것이 어떻게 가능할까?

 쉽게 설명하면 BeanDefinition은 추상화로 역할을 담당하며, 자바 코드, xml 파일은 그 역할의 구현체가 된다.

 BeanDefinition는 빈 설정 메타정보라고 생각하면 되는데, 자바 코드건 xml파일이건 상관없이, 이를 옳바르게 읽는 클래스를 이용해 해석하면 내부에 있는 메타 정보를 BeanDefinition으로 추출해낼수 있는 것이다.

 

BeanDefinition 내부에는 다음과 같은 정보가 들어있다.

BeanClassName: 생성할 빈의 클래스 명(자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)

factoryBeanName: 팩토리 역할의 빈을 사용할 경우 이름, 예) Config

factoryMethodName: 빈을 생성할 팩토리 메서드 지정, 예) alphabet

Scope: 싱글톤(기본값) lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때 까지 최대한 생성을 지연처리 하는지 여부

InitMethodName: 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명

DestroyMethodName: 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명

Constructor arguments, Properties: 의존관계 주입에서 사용한다. (자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)

 

당장 실무에 필요한게 아니라면 xml을 통한 빈 생성은 깊게 공부할 필요는 없다.

자바 코드를 이용하건, xml을 이용하건, 모두 결국은 BeanDefinition을 만드는 것이 목적이라는 것 정도만 알아두자.