Skip to content

Latest commit

 

History

History
55 lines (40 loc) · 2.2 KB

등록된 빈 목록 출력하기.md

File metadata and controls

55 lines (40 loc) · 2.2 KB

Spring에서는 애플리케이션을 구성하는 몇몇 클래스들을 싱글톤으로 관리할 수 있도록 '빈'을 등록한다. 해당 객체는 애플리케이션 실행 과정에서 주요한 정보를 설정하거나, 로직을 수행하는 역할을 수행한다.

빈은 자바 애플리케이션을 실행하여 Spring이 initializing 된 후에 스캔을 통해 컨텍스트에 등록되는데, 이렇게 등록된 빈의 목록을 출력하려면 아래와 같은 코드를 작성하여 클래스 경로 내에 넣어주면 된다.

//in java
@Component
public class BeanListPrinter implements CommandLineRunner {

    private ApplicationContext ac;
    BeanListPrinter(ApplicationContext ac) {
        this.ac = ac;
    }

    @Override
    public void run(String... args) {
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        Arrays.sort(beanDefinitionNames);
        
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }

}
//in kotlin
@Component
class BeanListPrinter(
    private val ac: ApplicationContext
): CommandLineRunner {
    override fun run(args: Array<String>) {
        val beans = ac.beanDefinitionNames;
        Arrays.sort(beans)

        for(i in beans.indices) {
            println(beans[i])
        }
    }
}

클래스 명은 아무거나 적어도 된다.

CommandLineRunner(org.springframework.boot.CommandLineRunner)를 상속받은 클래스를 Component(Bean)으로 지정해주면 Spring이 올라간 후에 run 메소드를 자동으로 invoke 해준다. run 메소드를 원하는대로 재정의해주면 해당 코드가 초기단계에서 한번 실행되도록 할 수 있다.

run 메소드 안에는, 빈 정보를 가지고 있는 ApplicationContext(org.springframework.context.ApplicationContext)에서 getBeanDefinitionNames()를 호출하여 출력하는 for문을 넣어주었다. 그리고 원하는 빈을 찾기 수월하도록, 출력 전 정렬을 해줬다.

이렇게 하면 빈 목록이 잘 출력되는 것을 볼 수 있다.

image