私はSpring(maven)プロジェクトのいくつかの方法をベンチマークしようとしています。プロジェクトのいくつかのフィールドで@Autowiredと@Injectを使う必要があります。プロジェクトを実行している間はうまくいきます。しかし、JMHは常に@ Autowired/@ InjectフィールドでNullPointerExceptionを取得します。JMH BenchmarkはSpring(Mavenを含む)プロジェクトのAutowiredフィールドでNullPointerExceptionを取得します
public class Resources {
private List<Migratable> resources;
@Autowired
public void setResources(List<Migratable> migratables) {
this.resources = migratables;
}
public Collection<Migratable> getResources() {
return resources;
}
}
マイベンチマーククラス
@State(Scope.Thread)
public class MyBenchmark {
@State(Scope.Thread)
public static class BenchmarkState {
Resources res;
@Setup
public void prepare() {
res = new Resources();
}
}
@Benchmark
public void testBenchmark(BenchmarkState state, Blackhole blackhole) {
blackhole.consume(state.res.getResources());
}
}
私は私のベンチマークを実行すると、それは具体的にresources
でResources.getResources()
でNullPointerExceptionが得られます。
setResources()をオートワイヤできません。しかし、私は私のプロジェクト(ベンチマークを除く)を実行する場合、それは正常に動作します。
ベンチマーク中にAutowiredフィールドでこのNullPointerExceptionを取り除くにはどうすればよいですか?