私はAOPを初めて使用しており、現在カスタム注釈で注釈が付けられたコントローラメソッドのアスペクトを実装しようとしています。 myFunctionが呼び出されたとき、に私はいつもNullPointerExceptionを取得します。それはコントローラの2つのインスタンスがあるようです。それらのうちの1つは、リポジトリのオートワイヤリングなしでインスタンス化されます。 @MyAnnotationを削除すると、すべてが期待通りに機能します。アスペクト使用時にSpring Boot RestControllerのコンストラクタが呼び出されない
Spring/AspectJにコンストラクタを強制的に使用させる方法についてのヒントはありますか?
私のコントローラは次のようになります。側面
@RestController
@RequestMapping(value = "/api")
public class MyController {
private Repository repository;
public MyController(Repository repository) {
this.repository = repository;
}
@RequestMapping(value = "/{variable1}", method = GET)
@MyAnnotation
public final FeatureCollection myFunction(
final @PathVariable(required = true) long variable1
) {
repository.findById(variable1);
(...)
}
}
:
@Aspect
public class MyAspect {
@Around("@annotation(MyAnnotation)")
public Object any(ProceedingJoinPoint pjp) throws Throwable {
return pjp.proceed();
}
}
設定:
@Configuration
@EnableAspectJAutoProxy
public class WebConfig {
@Bean
public MyAspect myAspect() {
return new MyAspect();
}
}
あなたのSpringバージョンは何ですか? – sjahan
_Spring Boot Starter Parent_バージョンは1.5.6です。リリース – anste
だから、答えには、「@ Autowired」は必要ありません。私は自分自身でそれをテストするつもりです、私はかなりコントローラが代理されている方法によると確信しています。私は再現しようとしていると私はあなたに戻ってきます。 – sjahan