Spring не сканирует компоненты без основной функции

Я пытаюсь реализовать Spring в плагине spigot. Я заметил, что получил BeanNotFoundException, при поиске в Интернете я пробовал некоторые вещи, но это никогда не работало. Поэтому я попытался запустить тот же код в основной функции, и он отлично сработал.

Код Java-плагина:

      private static AnnotationConfigApplicationContext context;

@Override
public void onEnable() {
    context = new AnnotationConfigApplicationContext("net.kikker234");

    Arrays.stream(context.getBeanDefinitionNames()).forEach(System.out::println);
}

Основной код:

      private static AnnotationConfigApplicationContext context;

public static void main(String[] args) {
    context = new AnnotationConfigApplicationContext("net.kikker234");

    Arrays.stream(context.getBeanDefinitionNames()).forEach(System.out::println);
}

Зависимости Pom.xml:

         <dependencies>
    <dependency>
        <groupId>org.spigotmc</groupId>
        <artifactId>spigot-api</artifactId>
        <version>1.18-R0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.6.4.Final</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.15</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.6.3</version>
    </dependency>
</dependencies>

Основная функция вывода:

          org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalPersistenceAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
core
registration

Выходной java-плагин:

        [10:56:00] [Server thread/INFO]: org.springframework.context.annotation.internalConfigurationAnnotationProcessor
[10:56:00] [Server thread/INFO]: org.springframework.context.annotation.internalAutowiredAnnotationProcessor
[10:56:00] [Server thread/INFO]: org.springframework.context.annotation.internalPersistenceAnnotationProcessor
[10:56:00] [Server thread/INFO]: org.springframework.context.event.internalEventListenerProcessor
[10:56:00] [Server thread/INFO]: org.springframework.context.event.internalEventListenerFactory

Я понимаю, что не могу использовать основную функцию в плагине, но что я могу попробовать в качестве обходного пути?

Кстати: когда я использую аннотацию @ComponentScan, она не работает в обоих случаях.

1 ответ

Spring нужен хотя бы один источник с аннотацией@ComponentScanдля сканирования компонентов.

Вы можете использоватьSpringApplicationBuilder. Он обеспечивает простую настройку с помощью шаблона построителя.

      ApplicationContext context = new SpringApplicationBuilder(Main.class)
  .run(new String[]{});
Другие вопросы по тегам