매일 조금씩

[IoC 컨테이너와 빈] 2. ApplicationContext와 다양한 빈 설정 방법 본문

Spring Framework/스프링 프레임워크 핵심 기술

[IoC 컨테이너와 빈] 2. ApplicationContext와 다양한 빈 설정 방법

mezo 2024. 11. 3. 18:40
728x90
반응형

 

 

 

[전체 목차]

  1. IoC 컨테이너와 빈
  2. Resource / Validation
  3. 데이터 바인딩
  4. SpEL
  5. 스프링 AOP
  6. Null-Safety

 

 

 

 

 

 

spring-boot-stater-web 의존성만 넣어 두면 우리가 애플리케이션을 만드는데 필요한 의존성들이 대부분 들어온다.

spring core, spring context, spring beans 이렇게 세개가 주요한 의존성들...

 

1. 스프링 IoC 컨테이너의 역할

  • 빈 인스턴스 생성
  • 의존 관계 설정
  • 빈 제공

 

2. ApplicationContext

: BeanFactory의 확장판.

   빈 관리 외에도 애플리케이션 이벤트, 국제화, 환경 설정, 애플리케이션 생명주기 관리 등 고급 기능을 지원

  • ClassPathXmlApplicationContext (XML)
  • AnnotaionConfigApplicationContext (Java)

 

3. 빈 설정

  • 빈 명세서: 빈에 대한 정의를 담고있음
    • 이름
    • 클래스
    • 스코프
    • 생성자 아규먼트 (constructor)
    • 프로퍼트 (setter)
    • ..

 

 

4. 컴포넌트 스캔

  • 설정 방법
    • XML 설정에서는 context:component-scan
    • 자바 설정에서 @ComponentScan
  • 특정 패키지 이하의 모든 클래스 중에 @Component 어노테이션을 사용한 클래스를 빈으로 자동으로 등록해 줌.

 

 

5. 빈 설정 방법의 변천사

1) application.xml에 <bean ~ /> 추가하는 방식

원래 application.xml에 빈을 하나하나 으로 적어주고 했다.

ApplicationContext context = ClassPathXmlApplicationContext(application.xml)

2) application.xml에 <context:component-scan ~/> 쓰고,

@Component 등 빈 어노테이션 쓰는 방식

거기서 의존성도 적어주고 하는게 귀찮다~ 해서 나온게

application.xml에 context:component-scan~~/ 을 쓰고,

@Component확장 받은 @Service, @Repository 등을 쓰는 거다.

물론 이 어노테이션을 쓰면 의존성 주입은 @Autowired같은 어노테이션으로 해줘야한다.

xml에 bean을 하나하나 명시하지 않아도 component-scan만 써두면 그걸 사용해서 어노테이션들을 스캔해서 빈으로 등록하는 식으로 허용하는게 Java Spring 2.5부터 가능했던 기능이다.

 

3) Java 빈 설정 파일 쓰는 방식 (@Configuration, @Bean, @Autowired)

근데 여기서 xml말고 java로 빈 설정 파일을 만들수 없을까? 해서 나온게 java 설정파일인 @Configuration 어노테이션이 붙은 자바 파일이다. 이안에서 @Bean을 붙여가며 등록이 가능하다.

ApplicationContext context = AnnotationConfigApplicationContext(ApplicationConfig.class)

 

@Configuration 클래스 내에서 @Bean 으로 클래스를 빈으로 등록할때 그 코드 안에서 의존성 주입을 해주지 않아도,

해당 클래스 안에서 @Autowired를 써도 의존성 주입이 된다.

 

4) Java 빈 설정 파일에 @Bean 말고 @ComponentScan 어노테이션 쓰는 방식

@Bean 으로 하나하나 해주는게 귀찮다

@Configuration 에 또 붙여주는 @ComponentScan이 추가됨.

 

5) @SpringBootApplication 쓰는 방식

이 모든건 Spring 에 대한 얘기고,

Spring boot에선 이걸 편리하게 제공한다.

그게 @SpringBootApplication 이다.

 

@SpringBootApplication 만 애플리케이션 클래스 위에 붙어있다면,

우린 이 모든 작업(ApplicationContext 를 사용한 모든 빈설정 관련 코드)을 안 해놔도 다 포함된 격이 된다.

 

 

 

 

 

728x90
반응형