我尝试使用 AspectJ 方面查看我的拆分器以进行日志记录。然而这似乎是不可能的。方面永远不会被调用,IntelliJ 告诉我建议没有任何方法。我使用 AspectJ 1.8.1。
您将在 github 上找到 SSCCE:https ://github.com/flaviait/StreamSpliteratorAspectJExample
带注释方面的拆分器:
public class RepositorySpliterator<T> implements Spliterator<T> {
@Override
@SpliteratorWatch
public boolean tryAdvance(Consumer<? super T> action) {
...
}
}
我的观点:
@Aspect
@Component
public class SpliteratorWatchAspect {
private static final Logger logger = LoggerFactory.getLogger(SpliteratorWatchAspect.class);
@After("@annotation(spliteratorWatch)")
public void watch(JoinPoint joinPoint, SpliteratorWatch spliteratorWatch) throws Throwable {
...
}
}
最后但并非最不重要的注释:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SpliteratorWatch {
}
我在不同的环境中做了几次,效果很好。Java 8 流 api、拆分器和方面是否存在任何已知问题?也许有人可以帮助我。那很好啊!