Нулевой автосервис в аспекте AspectJ в автономном приложении Spring Boot / Swing - PullRequest
0 голосов
/ 03 апреля 2019

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

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

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

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

Спасибо

1 Ответ

0 голосов
/ 04 апреля 2019

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

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

    aspect.setLogEntryService(logEntryService);

    return aspect;
}

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

...