본문 바로가기

SpringBoot

ch3 07. 의존성 관리와 설정의 자동화(2)

5. @SpringBootApplication

- Spring Boot Application의 시작 클래스에 붙인다. 

- @SpringBootApplication = @Configuration(설정클래스) + @EnableAutoConfiguration(자동설정 가능) + @ComponentScan(자동 빈 스캔)

@SpringBootApplication
public class Main {
	public staitc void main(String[] args) {
    	ApplicationContext ac = SpringApplication.run(Main.class, args);
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        Arrays.sort(beanDefinitionNames);
        
        Arrays.stream(beanDefinitionNames).forEach(System.out::println);
    }
}

시작 클래스를 Main.class라고 지정. 
이 run 메소드가 ApplicationContext를 반환한다. 그러면 우리가 전에 배운 getBeanDefinitionNames()와 같은
메소드들을 사용할 수 있다. 

 

 

 

 

<실습>

[Main.java]

package com.fastcampus.ch3.di4;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

import java.util.Arrays;

//@SpringBootApplication // 은 아래의 3개 애너테이션을 붙인것과 동일

@SpringBootConfiguration
//@EnableAutoConfiguration
@ComponentScan
public class Main {
    public static void main(String[] args) {
        ApplicationContext ac = SpringApplication.run(Main.class, args);
        System.out.println("ac = " + ac);
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();

        Arrays.sort(beanDefinitionNames); // 빈 목록이 담긴 배열을 정렬
        Arrays.stream(beanDefinitionNames) // 배열의 스트림을 반환
                .filter(b->!b.startsWith("org"))
                .forEach(System.out::println); // 스트림의 요소를 하나씩 꺼내서 출력
    }

    @Bean
    MyBean myBean() {return new MyBean();}
}

    class MyBean {}

@Bean으로 등록한 myBean이 등록된 것을 볼 수 있다. 

 

 

 

5. @SpringBootApplication (아래 3개 하나로 대체 가능)

+ @SpringBootConfiguration -> @Configuration (자바 설정 파일)

+ @ComponentScan(@Component 클래스를 자동 검색 AC에 빈 등록)

+ @EnableAutoConfiguration

           ->  @AutoConfigurationPackage(자동 설정이 들어있는 패키지 스캔) -> @Import({Registrar.class})(어떤 빈을 등록                                                                                                                                                                         할지 자동 결정) 

           ->  @Import({AutoConfigurationImportSelector.class})   (자바 설정 파일 클래스)
               ImportSelector.class가 있는 경우에는 선택적으로 결정. 여러 자바 설정 파일이 있다면, 조건에 따라서
               어떤 설정 파일을 선택할지 결정(ex. if문으로 config1 또는 config2... 결정)

 

 

cf) AC 설정

1) XML 설정

2) Java 클래스 설정

 

@Configuration은 자바 클래스 설정할 때 클래스에 붙이는 것.

그러면 클래스 설정에 @Bean태그가 붙어있는 빈들을 AC에 등록

 

 

* 스프링 부트의 핵심 2가지

- starter - 라이브러리를 패키지로 자동 결정

- @EnableAutoConfiguration - 빈 등록 자동결정(빈 설정 / 빈 구성)

 

'SpringBoot' 카테고리의 다른 글

ch3 09. 외부 설정 사용하기  (0) 2023.07.31
ch3 08. @Import와 @Conditional  (0) 2023.07.31
ch3 06. 의존성 관리와 설정의 자동화(1)  (0) 2023.07.31
ch3 05. Spring 애너테이션  (0) 2023.07.30
ch3 04. Bean과 ApplicationContext  (0) 2023.07.30