Нулевой сервис Autowired в аспекте AspectJ в отдельном приложении Spring Boot/Swing

В настоящее время у меня есть приложение Swing, работающее на Spring Boot, запущенное со следующим кодом:

SpringApplication application = new SpringApplication(Something.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);

Я включил java-агенты для аспектов jweaver и spring-instrument и включил плетение во время загрузки, так как мне нужно ориентироваться на частные методы. Мой аспект предназначен для ведения журнала, поэтому мне нужно автоматически подключить службу ведения журнала, которая записывает записи в таблицу журнала в базе данных. Класс аспекта аннотируется @Aspect и @Component. Я пытаюсь автоматически связать службу с аннотацией @Autowired, но значение равно null, когда выполняется любой pointcut. Я предполагаю, что это связано с каким-то другим механизмом, отличным от контекста Spring, создающего экземпляры этих аспектов, но я не могу понять, как правильно автоматически подключить мою требуемую службу. Я попытался реализовать интерфейс ApplicationContextAware, но это тоже не сработало.

Есть ли у кого-нибудь опыт автоматического подключения сервисов к аспектам AspectJ в приложении Swing? У меня есть еще один проект, который работает на Spring Boot и Spring MVC, и он работает из коробки.

Спасибо


person Martin    schedule 03.04.2019    source источник


Ответы (1)


Моя проблема оказалась частично связанной с многопоточностью, но в основном мне не хватало этого:

@Bean
public MessagingLogger messagingLogger(LogEntryService logEntryService) 
{
    MessagingLogger aspect = Aspects.aspectOf(MessagingLogger.class);

    aspect.setLogEntryService(logEntryService);

    return aspect;
}

Вот как я смог «внедрить» свое служение в свой аспект. Вторая часть моей проблемы заключалась в том, что я был недостаточно осторожен в настройке многопоточности (много фоновых процессов в этом приложении), и я пытался использовать этот аспект, в то время как Spring даже не закончил создание всех Сервисы.

person Martin    schedule 04.04.2019