kratos2333
1/26/2017 - 9:51 AM

enable AOP need to add following in the beans.xml or have a java config class -- Aspect J = Point Cut(@Aspect) + Advice(@Before)

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

}