enable AOP need to add following in the beans.xml or have a java config class -- Aspect J = Point Cut(@Aspect) + Advice(@Before)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<aop:aspectj-autoproxy />
<context:component-scan base-package="simpleaspect" />
</beans>
package configuration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages="simpleaspect")
public class SimpleAspectConfiguration {
}
package simpleaspect;
import org.aspectj.lang.JoinPoint;
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;
@Component
@Aspect
public class TracingAspect {
public boolean isEnteringCalled() {
return enteringCalled;
}
Logger logger = LoggerFactory.getLogger(TracingAspect.class);
boolean enteringCalled = false;
@Before("execution(* *(..))")
public void entering(JoinPoint joinPoint) {
enteringCalled = true;
logger.trace("entering "
+ joinPoint.getStaticPart().getSignature().toString());
}
}
package simpleaspect;
import org.springframework.stereotype.Service;
@Service
public class SimpleService {
public void doSomethingElse(int i) {
}
}
// Junit testing use xml as the configuration
package simpleaspect;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/simpleaspect.xml")
public class SimpleAspectXMLTest {
@Autowired
TracingAspect tracingAspect;
@Autowired
SimpleService simpleService;
@Test
public void aspectIsCalled() {
assertFalse(tracingAspect.isEnteringCalled());
simpleService.doSomethingElse(42);
assertTrue(tracingAspect.isEnteringCalled());
}
}
// Junit test class using the java configuration
package simpleaspect;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import configuration.SimpleAspectConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SimpleAspectConfiguration.class)
public class SimpleAspectJavaConfigTest {
@Autowired
TracingAspect tracingAspect;
@Autowired
SimpleService simpleService;
@Test
public void aspectIsCalled() {
assertFalse(tracingAspect.isEnteringCalled());
simpleService.doSomethingElse(42);
assertTrue(tracingAspect.isEnteringCalled());
}
}