我正在使用 ServiceFactoryBean 和 ServiceListFactoryBean 收集一些 SPI 实现实例,并自动连接到我的服务 bean。现在我创建了一些方面来拦截这些类以测量性能和记录调用。
我注意到 spring 正在为 ServiceFactoryBean 捕获的实例创建代理并注入到服务 bean 中。但它没有为 ServiceListFactoryBean 捕获的实例列表创建任何代理。
我如何告诉 spring 为这些 bean 创建代理以使我的方面工作?
以下是我的代码片段 -
收集 SPI 实现并将其公开以进行自动装配的配置
@Bean
public ServiceFactoryBean faceImageStorageProvider() {
ServiceFactoryBean serviceFactoryBean = new ServiceFactoryBean();
serviceFactoryBean.setServiceType(FaceImageStorageProvider.class);
return serviceFactoryBean;
}
@Bean
public ServiceListFactoryBean notificationSenders() {
ServiceListFactoryBean serviceListFactoryBean = new ServiceListFactoryBean();
serviceListFactoryBean.setServiceType(NotificationSender.class);
return serviceListFactoryBean;
}
方面(这个有效)
@Pointcut("execution(* com.xxx.spi.storage.FaceImageStorageProvider.*(..))")
private void anyFaceImageStorageProviderAPI() {}
(这个不行)
@Pointcut("execution(* com.xxx.spi.notification.NotificationSender.*(..))")
private void anyNotificationSenderAPI() {}