私はspring aopをSpringブートプロジェクトで使用しようとしています。メインクラスのジョイントポイントで私が練習したアドバイスを得られない理由はわかりません。 AOPはサービスクラスでうまく機能しています。コードは以下の通りです。Spring AOPはSpringブートプロジェクトでメインクラスで動作していませんか?
SpringBootWithAOP.java
package com.example.demo;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.example.demo.services.SayHelloService;
@SpringBootApplication
public class SpringBootWithAOP {
@Autowired
SayHelloService service;
String message;
static String name;
public static void main(String[] args) {
name="George";
SpringApplication.run(SpringBootWithAOP.class, args);
}
@PostConstruct
public void init() {
service.message(name);
}
}
SayHelloService.java
package com.example.demo.services;
import org.springframework.stereotype.Service;
@Service
public class SayHelloService {
public String message(String name) {
System.out.println("Hello Dear User - " + name);
return "Hello Dear User - " + name ;
}
}
MasterLoggerAspect.java
package com.example.demo.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class MasterLoggerAspect {
@Before("execution(* com.example.demo.services.*.*(..))")
public void doForEveryServicesMethod(JoinPoint jp){
System.out.println("hurray! In class: " + jp.getSignature().getDeclaringTypeName() + " - before method: " + jp.getSignature().getName());
}
//this advice is not getting weaved
@Before("execution(* com.example.demo.*.*(..)) ")
public void doForEveryMainClassMethod(JoinPoint jp){
System.out.println("hurray! In class: " + jp.getClass() + " - before method: " + jp.getSignature().getName());
}
}
pom.xmlにはspring-boot-starter-aopがあります。
問題のある箇所を示唆するものがあります。
出力 - ここで入手可能
hurray! In class: com.example.demo.services.SayHelloService - before method: message
Hello Dear User - George
コード:https://github.com/samshers/46692518/
GR8の答えがあります。私は '@ Component'アノテーションをメインクラスに追加しようとしました。それがうまくいくと思った。しかし、運がない。これは限界か、私は何かもっとやる必要があります。メインクラスにもAOPログを記録したい。 – samshers
が回答を編集しました。上記のインターフェイスを実装する新しいクラスを作成し、テストが有効な場合はポイントカットを実行するようにしてください。 – LT56
gr8。応答のためのthx。私はAOPを使って 'public static void main(String [] args){...}'をトレースすることにもっと悩まされています。これを達成するための何らかの方法がありますか? – samshers