Рубрики
Без рубрики

Весенний ботинок: Как получить только бобы Я явно создал

Проблема: мне нужно получить все компоненты, которые я явно создал в своем приложении. При вызове приложения Con… Помеченный как java, spring, springboot, todayilearned.

Проблема: Мне нужно получить все компоненты, которые я явно создал в своем приложении. При вызове ApplicationContext.getbeandefinitionname() я получаю список имен компонентов, но многие из них созданы явно не мной, а Spring, и они меня не интересуют. На данный момент нет правила именования, которое я мог бы использовать для фильтрации, потому что не все компоненты, вводимые Spring, начинаются с “org.springframework”

Решение: Используя ApplicationContext.getbeandefinitionname() и фильтруя компоненты по имени моего корневого пакета (это решение также работает для других вариантов использования, например, если я хочу получить все компоненты, которые я определил в определенном пакете).

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

Это дает мне список всего из 5 компонентов, именно тех, которые меня интересуют:

Оригинал: “https://dev.to/ovidiu141/spring-boot-tip-how-to-get-only-the-beans-i-have-created-explicitly-54bf”