Ho problemi a ottenere la mia funzione di registrazione per registrare le informazioni quando si accede ai metodi da classi di un particolare pacchetto. In altre parole, si verifica "no". Mi sono persino disperata e ho aggiunto le dichiarazioni di System.out.println, senza fortuna.Aspetti per il boot di avvio a molla
Tutte le mie classi sono situati sotto il pacchetto org.my.package, cioè org.my.package.controller, org.my.package.model, ecc
Ecco la mia classe di applicazione:
package org.my.package;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@ComponentScan(basePackages = {"org.my.package.config"})
@EnableAutoConfiguration
@EnableAspectJAutoProxy
public class FirstWebAppApplication {
public static void main(String[] args) {
SpringApplication.run(FirstWebAppApplication.class, args);
}
}
Questa è la mia classe di configurazione:
package org.my.package.config;
import org.deloitte.javatraining.daythree.utilities.MyLogger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = {"org.my.package.utilities"})
public class AssetConfig {
//-----------------------------------------------------------------------------------------------------------------------
@Bean
public MyLogger myLogger(){
return new MyLogger();
}
}
Questa è la mia classe Aspetto:
package org.my.package.utilities;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class MyLogger {
/** Handle to the log file */
private final Log log = LogFactory.getLog(getClass());
public MyLogger() {}
@AfterReturning("execution(* org.my.package.*.*(..))")
public void logMethodAccessAfter(JoinPoint joinPoint) {
log.info("***** Completed: " + joinPoint.getSignature().getName() + " *****");
System.out.println("***** Completed: " + joinPoint.getSignature().getName() + " *****");
}
@Before("execution(* org.my.package.*.*(..))")
public void logMethodAccessBefore(JoinPoint joinPoint) {
log.info("***** Starting: " + joinPoint.getSignature().getName() + " *****");
System.out.println("***** Starting: " + joinPoint.getSignature().getName() + " *****");
}
}
Questi sono i miei Gradle costruire dipendenze:
dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-web")
compile('com.h2database:h2:1.3.156')
compile('javax.servlet:jstl:1.2')
compile('org.springframework.boot:spring-boot-starter-aop')
providedRuntime("org.apache.tomcat.embed:tomcat-embed-jasper")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
Mi manca qualcosa o altro mis-configurazione mia classe Aspect? Non riesco a trovare nulla di sbagliato, dopo aver verificato con altre domande simili Stack Overflow e tutorial online.
Si prega di avvisare.
Attualmente si stanno verificando solo i metodi sulle classi nei pacchetti secondari 'org.my.package'. Quello che probabilmente si desidera è 'execution (* org.my.package .. *. * (..))' nota '..' invece di' .'. –
* face-palm * Grazie !! Era così. Per favore rispondi con una risposta, così posso darti credito per questa domanda. – Rick