[Spring] @Configuration, @Bean

Spring @Configuration과 @Bean에 대해 알아봅시다.

sonnie
lucky-sonnie
4 min readSep 26, 2020

--

@Configuration

스프링이 Bean Factory를 위한 오브젝트 설정을 담당하는 클래스라고 인식할 수 있도록 한다. (애플리케이션 컨텍스트 또는 빈 팩토리가 사용할 설정정보라는 표시)

@Bean

오브젝트를 만들어주는 메소드에는 @Bean 이라는 애노테이션을 붙여준다. (오브젝트 생성을 담당하는 IoC용 메서드라는 표시)

스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리(Bean Factory)라고 부른다. 보통 빈 팩토리보다 이를 좀 더 확장한 애플리케이션 컨텍스트(Application Context)를 주로 사용한다. 애플리케이션 컨텍스트는 IoC 방식을 따라 만들어진 일종의 빈 팩토리라고 생각하면 된다. 빈 팩토리와 애플리케이션 컨텍스트를 같다고 생각하면 편하다.

  • 빈 팩토리: 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춘 것. 일반적으로 설정정보 (어떤 클래스의 오브젝트를 생성하고 어디에서 사용하도록 연결해줄 것인가 등)가 자바 코드로 만들어져 있다.
  • 애플리케이션 컨텍스트: 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진. 별도의 정보를 참고해서 빈(오브젝트)의 생성, 관계설정 등의 제어 작업을 총괄한다. 빈 팩토리의 설정 정보를 직접적으로 담고 있지는 않고, 별도로 설정정보를 담고 있는 무엇인가를 가져와 이를 활용하는 범용적인 IoC 엔진 같은 것이다.

ApplicationContext

ApplicationContext를 구현한 클래스는 여러 가지가 있는데 @Configuration이 붙은 자바코드를 설정정보로 사용하려면 AnnotationConfigApplicationContext를 이용하면 된다. 애플리케이션 컨텍스트를 만들 때 생성자 파라미터로 원하는 팩토리 클래스를 넣어준다. 이렇게 준비된 Application의 getBean()이라는 메서드를 이용해 아래 예제의 userDao의 오브젝트를 가져올 수 있다.

getBean()메서드는 ApplicationContext가 관리하는 오브젝트를 요청하는 메서드다. getBean()의 파라미터인 “userDao”는 ApplicationContext에 등록된 빈의 이름이다. 위의 DaoFactory에서 userDao 메서드에 @Bean 애노테이션을 붙였는데 이 메서드 이름이 빈의 이름이 된다. userDao라는 이름의 빈을 가져온다는 것은 DaoFactoryuserDao()메서드를 호출해서 그 결과를 가져온다고 생각하면 된다.

UserDao를 가져오는 메서드는 하나뿐인데 왜 굳이 이름을 사용하는 이유는 UserDao를 생성하는 방식이나 구성을 다르게 하는 메서드를 추가할 수 있기 때문이다. 그때는 specialUserDao()라는 메소드로 만들고 getBean("specialUserDao", UserDao.class)로 가져오면 된다.

출처

토비의 스프링1

--

--