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 목록만 제공됩니다.
Reference
이 문제에 관하여(Spring Boot: 명시적으로 생성한 빈만 가져오는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ovidiu141/spring-boot-tip-how-to-get-only-the-beans-i-have-created-explicitly-54bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)