Spring Boot получает имя основного класса во время выполнения - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь написать сканер для пользовательских аннотаций на основе ответа в Сканирование аннотаций Java во время выполнения .

Однако, чтобы ускорить процесс, я хочу только сканироватьклассы под основным пакетом (пакет, который имеет основной класс и его подпакеты).Я подумал, что самый простой способ определить имя пакета будет из основного класса.

Код, который я пишу, окажется в библиотеке, которая будет использоваться приложениями Spring Boot.Поэтому у меня нет возможности узнать имя основного класса.Есть ли способ определить имя основного класса во время выполнения в приложении Spring Boot?

С уважением,

Anoop

1 Ответ

0 голосов
/ 14 октября 2018

Если ваш основной класс помечен @SpringBootApplication, это можно сделать с помощью ApplicationContext::getBeansWithAnnotation():

@Service
public class MainClassFinder {

    @Autowired
    private ApplicationContext context;

    public String findBootClass() {
        Map<String, Object> annotatedBeans = context.getBeansWithAnnotation(SpringBootApplication.class);
        return annotatedBeans.isEmpty() ? null : annotatedBeans.values().toArray()[0].getClass().getName();
    }
}
...