Spring Boot: 명시적으로 생성한 빈만 가져오는 방법

문제: 내 앱에서 명시적으로 생성한 모든 빈을 가져와야 합니다. applicationContext.getBeanDefinitionNames()를 호출할 때 나는 bean 이름 목록을 얻었지만 그들 중 많은 수가 내가 아닌 Spring에 의해 명시적으로 생성되었고 나는 그것들에 관심이 없습니다. Spring에 의해 주입된 모든 bean이 "org.springframework"로 시작하는 것은 아니기 때문에 이 시점에서 필터링에 사용할 수 있는 명명 규칙이 없습니다.



솔루션: applicationContext.getBeanDefinitionNames()를 사용하고 내 루트 패키지 이름으로 빈을 필터링합니다(이 솔루션은 다른 사용 사례에서도 작동합니다. 예를 들어 특정 패키지에서 정의한 모든 빈을 가져오려는 경우).

package com.omiu.demo;

....

@Service
class PersonService {}

@Component
class PersonAnalyzer {}

class SimpleAnalyzer {}

@Configuration
class GeneralConfig {

    @Bean
    public SimpleAnalyzer simpleAnalyzer() {
        return new SimpleAnalyzer();
    }
}

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);

        List<Object> myBeans = Arrays.stream(applicationContext.getBeanDefinitionNames())
                .filter(beanName -> applicationContext.getBean(beanName).getClass().getPackage().getName().startsWith("com.omiu.demo"))
                .map(applicationContext::getBean)
                .collect(Collectors.toList());
    }
}


이렇게 하면 정확히 내가 관심이 있는 5개의 Bean 목록만 제공됩니다.

좋은 웹페이지 즐겨찾기