Skip to content

등록된 빈 목록 출력하기

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