Due to the popularity of the Spring framework SpringAOP is the most popular AOP framework these days.
SpringAOP has it's limitation such as:
The benefit of SpringAOP is that it unlike AspectJ works with javac compiler.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.foo</groupId>
<artifactId>aspect4log-spring-sample</artifactId>
<version>1.0.7</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- aspect4log can work with java 1.6 and above -->
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<!-- the logging is done via slf4j -->
<slf4j.version>1.7.10</slf4j.version>
<spring.version>4.1.5.RELEASE</spring.version>
<aspectj.version>1.8.5</aspectj.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<!--We need this because Spring still uses common-logging, jcl-over-slf4j will substitute calles to common-loggin.
Make sure you excluded common-logging in every module that depends on it.
For more details read http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/htmlsingle/#overview-logging-slf4j -->
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<!--we will use logback as logger implementation, it is also possible to log4j and java logging -->
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>net.sf.aspect4log</groupId>
<artifactId>aspect4log</artifactId>
<version>1.0.7</version>
</dependency>
</dependencies>
</project>@Configuration
@ComponentScan("org.foo")
@EnableAspectJAutoProxy
public class SpringAopConfiguration {
@Bean
LogAspect createLogAspect(){
return new LogAspect();
}
}Place @Log annotation on any spring bean you have to log it's method's invocation.
Checkout a sample project that demonstrates integration with SpringAOP here https://github.com/yilativs/aspect4log-springaop-sample