Spring Boot / Swing独立应用程序中AspectJ方面的自动连线服务为null

时间:2019-04-03 19:28:32

标签: java swing spring-boot aspectj autowired

我目前有一个在Spring Boot上运行的Swing应用程序,使用以下代码启动:

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

由于我需要定位私有方法,因此我已经为Aspectjweaver和spring-instrument启用了Java代理,并启用了加载时编织。我的方面是日志记录,因此我需要自动连接日志记录服务,该服务会将条目写入数据库中的日志表。方面类使用@Aspect和@Component进行注释。我正在尝试使用@Autowired批注自动装配服务,但是执行任何切入点时该值为null。我假设这与实例化这些方面的Spring上下文有关,但与某种其他机制有关,但是我无法弄清楚如何正确地自动连接所需的服务。我尝试实现ApplicationContextAware接口,但是它也不起作用。

有人在Swing应用程序上将服务自动装配到AspectJ方面方面有经验吗?我还有另一个在Spring Boot和Spring MVC上运行的项目,它可以直接使用。

谢谢

1 个答案:

答案 0 :(得分:0)

我的问题原来与多线程有关,但是我最想念的是:

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

    aspect.setLogEntryService(logEntryService);

    return aspect;
}

这就是我将服务“注入”到我的方面的方式。问题的第二部分是,我在多线程设置中不足够小心(此应用程序中有很多后台进程),并且我尝试使用方面,而Spring甚至还没有完成创建所有服务。