728x90
반응형

[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=홍길동)
728x90
반응형

+ Recent posts