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[]{});