diff --git a/src/main/java/com/madadipouya/sample/aspectj/interceptor/LoggingInterceptor.java b/src/main/java/com/madadipouya/sample/aspectj/interceptor/LoggingInterceptor.java index 80f3831..02a7aa2 100644 --- a/src/main/java/com/madadipouya/sample/aspectj/interceptor/LoggingInterceptor.java +++ b/src/main/java/com/madadipouya/sample/aspectj/interceptor/LoggingInterceptor.java @@ -1,22 +1,21 @@ package com.madadipouya.sample.aspectj.interceptor; +import com.madadipouya.sample.aspectj.service.LoggingService; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; +import org.springframework.beans.factory.annotation.Autowired; import java.time.ZoneOffset; import java.time.ZonedDateTime; @Aspect -@Component public class LoggingInterceptor { - private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class); + @Autowired + private LoggingService loggingService; @Before(value = "execution(* com.madadipouya.sample.aspectj.controller.UserController.getUsersInternal(..))") public void addCommandDetailsToMessage() throws Throwable { - logger.info("User controller getUsers method called at {}", ZonedDateTime.now(ZoneOffset.UTC)); + loggingService.log(String.format("User controller getUsers method called at %s", ZonedDateTime.now((ZoneOffset.UTC)))); } } diff --git a/src/main/java/com/madadipouya/sample/aspectj/interceptor/config/LoggingInterceptorConfig.java b/src/main/java/com/madadipouya/sample/aspectj/interceptor/config/LoggingInterceptorConfig.java new file mode 100644 index 0000000..ec75c1c --- /dev/null +++ b/src/main/java/com/madadipouya/sample/aspectj/interceptor/config/LoggingInterceptorConfig.java @@ -0,0 +1,15 @@ +package com.madadipouya.sample.aspectj.interceptor.config; + +import com.madadipouya.sample.aspectj.interceptor.LoggingInterceptor; +import org.aspectj.lang.Aspects; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class LoggingInterceptorConfig { + + @Bean + public LoggingInterceptor getAutowireCapableLoggingInterceptor() { + return Aspects.aspectOf(LoggingInterceptor.class); + } +} diff --git a/src/main/java/com/madadipouya/sample/aspectj/service/LoggingService.java b/src/main/java/com/madadipouya/sample/aspectj/service/LoggingService.java new file mode 100644 index 0000000..ac53b3d --- /dev/null +++ b/src/main/java/com/madadipouya/sample/aspectj/service/LoggingService.java @@ -0,0 +1,6 @@ +package com.madadipouya.sample.aspectj.service; + +public interface LoggingService { + + void log(String message); +} diff --git a/src/main/java/com/madadipouya/sample/aspectj/service/impl/DefaultLoggingService.java b/src/main/java/com/madadipouya/sample/aspectj/service/impl/DefaultLoggingService.java new file mode 100644 index 0000000..a898ff6 --- /dev/null +++ b/src/main/java/com/madadipouya/sample/aspectj/service/impl/DefaultLoggingService.java @@ -0,0 +1,22 @@ +package com.madadipouya.sample.aspectj.service.impl; + +import com.madadipouya.sample.aspectj.service.LoggingService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +/** + * A dummy implementation of logging service, + * just to inject it in {@link com.madadipouya.sample.aspectj.interceptor.LoggingInterceptor} + * that's managed by AspectJ + */ +@Service +public class DefaultLoggingService implements LoggingService { + + private static final Logger logger = LoggerFactory.getLogger("sample-spring-aspectj"); + + @Override + public void log(String message) { + logger.info(message); + } +}