상세 컨텐츠

본문 제목

[1.5]Spring IoC

토비의스프링

by kwanghyup 2020. 10. 27. 19:54

본문

스프링이 직접 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈(Bean)이라 한다. 

 

스프링에서 빈의 생성과 관계설정 같은 제어를 담당하는 IoC오브젝트를

빈 팩토리(Bean Factory)라고 한다. 

 

스프링을 사용하기위해 pom.xml에 의존관계를 추가한다. 

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

 

 이제 DaoFactory를 스프링에서 사용이 가능하도록 만들어보자.

package springbook.user.dao;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DaoFactory {
	
	@Bean
	public ConnectionMaker connectionMaker() {
		return new DConnectionMaker(); 
	}
	
	@Bean
	public UserDao userDao() { 
		return new UserDao(connectionMaker());
	}
	
	// 기존의 MessageDao, AccountDao를 생성하는 코드는 제거한다. 
}

@Configuration : 스프링이 빈 팩토리를 위한 오브젝트 설정을 담당하는

클래스라고 인식할 수 있게 해준다. 

@Bean : 오브젝트 생성을 담당하는 IoC용 메소드라는 표시이다. 

 

DaoFactory를 설정정보로 사용하는 애플리케이션 컨텍스트를 만들어보자. 

UserDaoTest의 메인 메소드에 만든다.

 

코드 작성후 DB를 초기화하고 테스트 해본다. 

package springbook.user.dao;

import java.sql.SQLException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import springbook.user.domain.User;

public class UserDaoTest {
	
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		ApplicationContext context =
				new AnnotationConfigApplicationContext(DaoFactory.class);
		UserDao dao = context.getBean("userDao", UserDao.class);
		
		User user = new User();
		user.setId("whiteship");
		user.setName("백기선");
		user.setPassword("married");
		
		dao.add(user);
		
		System.out.println(user.getId() + " 등록성공");
	}
	
}

getBean()메소드는 ApplicationContext가 관리하는 오브젝트를 요청하는 메소드이다.

 

"userDao"는 ApplicationContext에 등록된 빈의 이름이다. 

DaoFactory에서  userDao()라는 메소드를 만들었는데 

이때 빈으로 등록하면 이 빈의 이름이 "userDao"가 된다.

 

getBean()은 기본적으로 Object타입으로 리턴을 한다.

자바 5이상부터 재네릭의 메소드 방식을 사용해

getBean()의 두번째 파라미터에 리턴타입을 미리 정할 수 있다. 

 

애플리케이션 컨텍스트 동작방식

 

오브젝트 팩토리에 대응되는 것이 스프링의 애플리케이션 컨텍스트이다.

스프링에서는 이 애플리케이션 컨텍스트를 IoC컨테이너 또는 스프링 컨테이너,빈팩토리라고 부른다.

 

애플리케이션 컨텍스트는 ApplicationContext 인터페이스를 구현한다.

ApplicationContext는 빈팩토리가 구현하는 BeanFactory인터페스를 상속했으므로

애플리케이션 컨텍스트는 일종의 빈팩토리인 셈이다.

 

애플리케이션 컨텍스트는 애플리케이션에서 IoC를 적용해서

관리할 모든 오브젝트에 대한 생성과 관계설정을 담당한다.

 

 @Configuration이 붙은 DaoFactory는 이 애플리케이션 컨텍스트가 활용하는

IoC설정정보이다.

 

 

'토비의스프링' 카테고리의 다른 글

[1.7] 의존관계 주입  (0) 2020.10.27
[1.6] 싱글톤 레지스트리와 오브젝트 스코프  (0) 2020.10.27
[1.4] 제어의 역전  (0) 2020.10.27
[1.3] DAO의 확장  (0) 2020.10.27
[1.2] DAO의 분리  (0) 2020.07.30

관련글 더보기

댓글 영역