0
サービス呼び出し時にすべてのメソッドを記録する際に問題があります。コードは次のようである:AOPのすべてのメソッドpublicメソッド呼び出しを記録する方法
package com.myproject.controller;
@RestController(/person)
public class Controller{
public Person getpersonInfo(){
......
getValidPerson();
}
}
public Person getValidPerson() {
isPersonValid(Person person);
....
}
Personクラスのメソッド:
package com.myproject.dao;
public class Dao{
public boolean isPersonValid(){
//Checks for the person is Valid
}
}
アスペクトクラス:
package com.myproject;
@Component
@Aspect
public class Logging{
@Before("execution(* com.myproject..*.*(..)))")
public void beforeServiceCall(Jointpoint jp) {
//Some Logging function
}
}
この
package com.myproject;
@SpringBootApplication
@EnableAutoConfiguration
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
@EnableAspectJAutoProxy()
public class Main implements LoadTimeWeavingConfigurer{
public static void main(String[] args){
......
}
}
ポンポンファイルなどのメインクラス:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-instrument -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.1</version>
</dependency>
私はサービスhttp://localhost:8080/person呼び出す - getpersonInfoを(GET)はこの場合のみに記録され、私は私がすべての内部メソッドをログに記録する必要も LTWを試してみましたが、
を解決しませんgetValidPerson()、isPersonValid()のようなサービスは、呼び出されたメソッドのすべての引数を示します。
ログに記録されていないものは言及していませんが、それを期限切れにしています。さらに、スニペットには、アスペクトが正しいかどうかを確認するために必要な情報の重要な部分が欠落しています。パッケージ名、クラス宣言など。注釈。短い質問は良いですが、あまりにも短くはありません。しかし、私はすでにあなたに伝えることができます:単純なSpring AOPでは、完全なAspectJ LTWには '@ EnableLoadTimeWeaving'、単純なSpring AOPでは' @ EnableAspectJAutoProxy'を使うべきです。ところで、プライベートメソッドはSpring AOPで捕捉することはできませんが、あなたのコードにプライベートメソッドがないので、問題はありません。 – kriegaex
動作しなかった '@ EnableAspectJAutoProxy'を削除しました。この問題を解決する他の方法をお勧めしますか? – Prabitha
私の前のコメントを読み、要求された情報を提供してください。 – kriegaex