[Spring Framework] 스프링 IoC 컨테이너 이해하기 | 정의
[Spring Framework] 스프링 IoC 컨테이너 이해하기 | 정의
[Spring Framework] Spring Framework란? 개요와 핵심 구성 모듈 정리 [Spring Framework] Spring Framework란? 개요와 핵심 구성 모듈 정리[Servlet] Servlet에서 Thread가 어떻게 작동하는가? 웹 개발자를 위한 완벽 가이드
crushed-taro.tistory.com
1. IoC Container 사용하기
- 아래 코드는 테스트에 공통적으로 사용할MemberDTO클래스이다.
@Data
@AllArgsConstructor
public class MemberDTO {
private int sequence; //회원번호
private String id; //아이디
private String pwd; //비밀번호
private String name; //이름
}
1. XML - based Configuration
1. GenericApplicationContext
GenericXmlApplicationContext는 Spring IoC Container 중 하나이다. XML 형태의 Configuration Metadata를 사용하여 Bean을 생성한다.
/* GenericXmlApplicationContext 클래스를 사용하여 ApplicationContext를 생성한다.
* 생성자에 XML 설정 메타 정보를 인자로 전달한다. */
ApplicationContext context
= new GenericXmlApplicationContext("spring-context.xml"
/*XML Configuration Metadata 파일 경로*/);
2. XML 기반 Configuration Metadata
XML 형태의 Configuration Metadata 파일은 다음과 같이 작성할 수 있다. 다음 예제에서는MemberDTO클래스의 객체를 Bean으로 등록하고 있다.
<?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="member" class="MemberDTO">
<!-- int 타입의 첫 번째 파라미터에 1 값을 전달 -->
<constructor-arg index="0" value="1"/>
<!-- String 타입의 id 파라미터에 "user01" 값을 전달 -->
<constructor-arg name="id" value="user01"/>
<!-- String 타입의 세 번째 파라미터에 "pass01" 값을 전달 -->
<constructor-arg index="2"><value>pass01</value></constructor-arg>
<!-- String 타입의 name 파라미터에 "홍길동" 값을 전달 -->
<constructor-arg name="name"><value>홍길동</value></constructor-arg>
</bean>
</beans>
- <beans>태그는 Bean 설정 정보를 담고 있는 메타데이터를 정의하는 태그이다.
- xmlns : XML Namespace를 정의
- xmlns:xsi : XML Schema Instance Namespace를 정의
- xsi:schemaLocation : XML Schema Location을 정의
- XML Schema는 XML 문서의 구조와 유효성을 검사하기 위한 언어로, XML Schema Definition(XSD) 파일을 통해 정의
- <beans> 태그 내부에 <bean>태그를 사용해 하나의 bean 설정 정보를 작성할 수 있다.
- id : Bean의 이름을 정의
- class : 객체의 클래스를 지정
- <constructor-arg> 태그는 생성자를 호출할 때 전달할 인자를 정의한다. 만약 <bean> 태그 내부에 아무 것도 작성하지 않으면 기본 생성자를 사용한다는 의미이다.
- index : 메서드의 파라미터 순서(index)로 전달
- name : 파라미터 이름으로 전달
- value : 파라미터 값으로 전달
3. GenericApplicationContext(스프링 컨테이너) 생성 테스트
GenericApplicationContext에 bean이 등록 되고 생성 되었는지 확인한다.
- bean의 id를 이용해서 bean을 가져오는 방법
MemberDTO member = (MemberDTO) context.getBean("member");
System.out.println(member);
//MemberDTO(sequence=1, id=user01, pwd=pass01, name=홍길동)
- bean의 클래스 메타 정보를 전달하여 가져오는 방법
MemberDTO member = context.getBean(MemberDTO.class);
System.out.println(member);
//MemberDTO(sequence=1, id=user01, pwd=pass01, name=홍길동)
- bean의 id와 클래스 메타 정보를 전달하여 가져오는 방법
MemberDTO member = (MemberDTO) context.getBean("member");
System.out.println(member);
//MemberDTO(sequence=1, id=user01, pwd=pass01, name=홍길동)
2. Java-based Configuration
1. AnnotationConfigApplicationContext
AnnotationConfigApplicationContext는 Spring IoC Container 중 하나이다. Java Configuration 형태의 Configuration Metadata를 사용하여 Bean을 생성한다.
/* AnnotationConfigApplicationContext클래스를 사용하여 ApplicationContext를 생성한다.
* 생성자에 @Configuration 어노테이션이 달린 설정 클래스의 메타 정보를 전달한다. */
ApplicationContext context
= new AnnotationConfigApplicationContext(ContextConfiguration.class);
2. Java 기반 Configuration Metadata
Java Configuration 형태의 Configuration Metadata 파일은 다음과 같이 작성할 수 있다. 다음 예제에서는MemberDTO클래스의 객체를 Bean으로 등록하고 있다.
@Configuration
public class ContextConfiguration {
@Bean(name="member")
public MemberDTO getMember() {
return new MemberDTO(1, "user01", "pass01", "홍길동");
}
}
@Configuration 어노테이션은 해당 클래스가 빈을 생성하는 클래스임을 표기한다.
- @Bean 어노테이션은 해당 메소드의 반환 값을 스프링 컨테이너에 빈으로 등록한다는 의미이다.
- 이름을 별도로 지정하지 않으면 메소드 이름을 bean의 id로 자동 인식한다.
- @Bean("myName") 또는 @Bean(name="myName") 의 형식으로 bean의 id를 설정할 수 있다.
3. AnnotationConfigApplicationContext(스프링 컨테이너) 생성 테스트
AnnotationConfigApplicationContext에 bean 이 등록 되고 생성 되었는지 확인한다.
MemberDTO member = context.getBean("member", MemberDTO.class);
System.out.println(member);
//MemberDTO(sequence=1, id=user01, pwd=pass01, name=홍길동)
'Java > Spring Framework' 카테고리의 다른 글
[Spring Framework] Annotation-based Configuration이란? Spring 설정을 더 간결하게! (0) | 2025.06.03 |
---|---|
[Spring Framework] 스프링 IoC 컨테이너 이해하기 | 정의 (1) | 2025.05.29 |
[Spring Framework] Spring Framework란? 개요와 핵심 구성 모듈 정리 (0) | 2025.05.27 |