リポジトリ メソッドが null を返すかどうかをチェックするアスペクトを作成するとします。
@Aspect
public class NonNullReturningAspect
{
@Around("anyPublicRepositoryMethod() && args(pk,.. )")
public Object checkNullResults(ProceedingJoinPoint joinPoint, Long pk) throws Throwable
{
Object result = joinPoint.proceed();
if (result == null && hasNonNullReturningAnnotation(joinPoint))
{
Class<?> returnType = calculateReturnType(joinPoint);
throw new ObjectNotFoundException(returnType, pk);
}
return result;
}
// ...
@Pointcut(value = "execution(public * somepackage..repository..*.*(..))")
private void anyPublicRepositoryMethod()
{
}
@Pointcut("@annotation(NonNullReturning)")
private void nonNullReturning()
{
}
}
これは、@NonNullReturning
アノテーションを持つ任意のメソッドを取り、 で戻りたい場合は自動的に例外をスローしnull
ます。
私が達成したいのは、これらの側面が吸収するメモリの量と、Spring がそれらの作成に費やす時間のプロファイルを作成することです。
このアスペクトは現在、ローカル スコープで動作しますが、このアスペクトをアプリケーション全体で有効にして Jetty (または Tomcat) を起動すると、どれだけのリソースが消費されるかがわかります。
編集:アプリケーションの起動時間が心配です。