SpringAop中@Before、@After、@Around执行顺序

 这次的博客一样采用全注解进行配置,东西也比较简单

 

 

首先说明,SpringAop需要有aspectjweaver这个依赖,要先加入到maven中;

<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
	<version>1.8.8</version>
</dependency>

 

其次,对于进行增强的方法,需要将其所在类加入到ioc容器中,如下:

 

@Component
public class HelloWorld {

	public void sayHello (){
		System.out.println("Hello World!");
	}
	
}
 

 

接下来需要声明切面,切点,通知,一样需要在spring的ioc容器内,且需要@Aspect注解,

@Aspect是让spring对该进行aop扫描,这样才能扫描到该类内部的切点、通知的注解,如下:

 

@Aspect
@Component
public class HelloWorldAspect {

	@Pointcut(value = "execution(* aop..sayHello(..))")
	public void pointCut (){  
		
	}
	
	@Before(value = "pointCut()")
	private void beforeAdvice (){ 
                System.out.println("===========before advice param:");
	}
	
	@After( value = "pointCut()")
	private void afterAdvice (){
	        System.out.println("===========after advice param:");
	}
	
	@Around(value = "pointCut()")
	private void aroundAdvice (ProceedingJoinPoint pjp) throws Throwable{
		System.out.println("===========before advice param: around");
		pjp.proceed();
		System.out.println("===========after advice param: around");
	}
	
}
 这样一来,我们就完成了切点匹配,前置、后知、环绕通知的声明,然后就可以进行测试了

 

 

测试代码如下:

@Test
public void testAop (){
	ApplicationContext ctx = new AnnotationConfigApplicationContext(AopConfig.class);
	HelloWorld hw = ctx.getBean(HelloWorld.class);
	hw.sayHello();
}
 

 

 

 

输出的结果如下:

 

===========before advice param: around
===========before advice param:
Hello World!
===========after advice param: around
===========after advice param:
 

 

 

 所以我们得到结果:

前置时    环绕通知  ->  前置通知

后置时    环绕通知  ->  后置通知

 

另外spring中还有@AfterReturning、@AfterThrowing,这些将在下一次再写了,如果想早点看的话,可以参考下面的这个链接:

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值