Можно ли использовать автоконфигурируемый компонент в моей собственной библиотеке автоконфигурации?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли использовать автоконфигурируемый компонент в моей собственной библиотеке автоконфигурации?

Сообщение Anonymous »

Я использовал Spring JavaMailSender и реализовал собственный MailService, который использует Thymeleaf и Spring JavaMailSender для предоставления методов обслуживания высокого уровня. Это сработало нормально.
Теперь мне понадобилась та же функциональность в другом приложении. Поэтому я извлек эту службу в библиотеку и использовал автоматическую настройку, чтобы подключить ее к своим приложениям.
И библиотека, и приложение используют Spring версии 3.3.2 и Java 17.
В моей библиотеке-POM у меня есть эти зависимости:

Код: Выделить всё

        
org.springframework.boot
spring-boot-autoconfigure-processor
true


org.springframework.boot
spring-boot-starter-mail


org.springframework.boot
spring-boot-starter-thymeleaf

и мое приложение зависит от моей библиотеки:

Код: Выделить всё

        
com.acme.library
lib-spring-mail
1.0.0-SNAPSHOT

Аннотированный класс @AutoConfiguration выглядит так:

Код: Выделить всё

@AutoConfiguration(after = { MailSenderAutoConfiguration.class,
ThymeleafAutoConfiguration.class})
@ConditionalOnClass({JavaMailSender.class, TemplateEngine.class})
public class MailAutoConfiguration {

@Autowired
private JavaMailSender mailSender;

@Autowired
private TemplateEngine templateEngine;

@Bean
@ConditionalOnMissingBean
public MailService mailService() {
return new MailService(mailSender, templatingService());
}

@Bean
@ConditionalOnMissingBean
public TemplatingService templatingService() {
return new TemplatingService(templateEngine);
}
}
а файл org.springframework.boot.autoconfigure.AutoConfiguration.imports выглядит следующим образом:

Код: Выделить всё

org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
Хотя компилируется без проблем, при запуске приложения я получаю следующее сообщение об ошибке:

Код: Выделить всё

Field mailSender in com.acme.library.spring.mail.MailAutoConfiguration required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found.

The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'org.springframework.mail.javamail.JavaMailSender' in your configuration.
Основное исключение:

Код: Выделить всё

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.mail.javamail.JavaMailSender' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1880) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1406) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784) ~[spring-beans-6.1.11.jar:6.1.11]
Хотя две начальные зависимости должны быть найдены моим приложением как транзитивные зависимости POM моей библиотеки, я явно добавил их в POM приложения. Однако это не изменило ошибку.
Как я могу использовать JavaMailSender, предварительно настроенный Spring-Boot, в моей библиотеке? Возможно ли это вообще?

Подробнее здесь: https://stackoverflow.com/questions/791 ... uration-li
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»