2015-05-19 4 views
12

У меня возникли проблемы с получением моего логического аспекта для регистрации информации при доступе методов из классов определенного пакета. Другими словами, происходит «нет» регистрации. Я даже отчаялся и добавил инструкции System.out.println, без везения.Аспекты Spring Boot Logger

Все мои классы расположены под пакетом org.my.package, т.е. org.my.package.controller, org.my.package.model и т.д.

Вот мой класс Применение:

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); 
    } 
} 

Это мой класс конфигурации:

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(); 
    } 
} 

Это мой Аспект класс:

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() + " *****"); 
    } 
} 

Это мои Gradle построить зависимости:

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") 
} 

Могу ли я что-то отсутствует или иначе неправильно настройки моего Aspect класс? Я не могу найти что-то неправильно, после проверки с помощью других аналогичных вопросов переполнения стека и онлайн-уроков.

Просьба сообщить.

+1

В настоящее время в классах 'org.my.package' не подпадают только методы класса. Вероятно, вам нужно выполнить 'execute (* org.my.package .. *. * (..))' обратите внимание на '..' вместо' .'. –

+0

* лицо ладонь * Спасибо !! Вот и все. Ответьте на ответ, поэтому я могу дать вам кредит на этот вопрос. – Rick

ответ

12

Ваш точечный разрез, execution(* org.my.package.*.*(..)), соответствует только выполнению методов классов в пакете org.my.package, а не подпакетах.

Возможно, что вы, возможно, захотите, это execution(* org.my.package..*.*(..)), а не ..