`
zk_chs
  • 浏览: 213239 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

 

 

分享到:
评论

相关推荐

    【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知

    本文带来的案例是:打印Log,主要介绍@Pointcut切点表达式的@annotation方式,以及 五种通知Advice注解:@Before、@After、@AfterRunning、@AfterThrowing、@Around。 本资源是@Pointcut使用@annotation的方式,结合...

    Spring AOP @Aspect 基本用法

    1、@Aspect放在类头上,把这个类作为一个切面。 2、 @Pointcut放在方法头上,定义一个可被别的方法引用的切入点...3.5、@Around,环绕通知,放在方法头上,这个方法要决定真实的方法是否执行,而且必须有返回值。

    spring aop API示例

    演示了spring对aop的before、after、throw、around几种advice的api操作。

    spring aop 实现源代码--xml and annotation(带lib包)

    会执行interceptorNames中执行的Advice,每个Advice在执行完自己的业务后,会调用MethodInvocation的proceed()方法,将执行的主动权移交给下一个Advice,直到没有下一个Advice为止,在执行完目标对象的方法后,...

    Spring  AOP实现方法大全

    Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、Around Advice、Throw Advice。 1、Before Advice 顾名思义,Before Advice会在目标对象的方法执行之前被调用...

    深入解析Spring AOP源码:从原理到实现,全方位掌握Java AOP编程精髓

    Spring AOP支持不同类型的通知,如前置通知(Before)、后置通知(After)、返回后通知(After-returning)、抛出异常后通知(After-throwing)和环绕通知(Around)。这种机制使得开发者可以在运行时动态地应用这些...

    Spring注解 - 52注解 - 原稿笔记

    注解包含: 拦截器 , 过滤器 , 序列化 , @After , @AfterReturning , @AfterThrowing , @annotation , @Around , @Aspect , @Autowired , @Bean , @Before , @Component , @ComponentScan , @ComponentScans , @...

    Spring AOP配置源码

    包或子包下的所有方法之前或之后或抛出异常时依次调用id为logIntercepter的类中的before after exception方法 测试用例 package com.spring.test; import javax.annotation.Resource; import org.junit.Test; ...

    Spring AOP详细介绍.docx

    (3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around (4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式 (5)AOP代理:AOP框架...

    AOP 和 Aspect 注解切入 测试 Demo

    AOP 和 Aspect 注解切入 测试 Demo 1.ProxyFactory 基于 MethodBeforeAdvice、AfterReturningAdvice 利用 Spring Api...基于注解的形式:@Aspect、@PointCut、@Before、@Around、@After、@AfterRunning、@AfterThrowing

    Spring的AOP IOC

    一个机遇Spring3的入门小案例,里面主要简单演示了Spirng配置文件如何配置自动扫描包,控制类、服务类、Dao类如何加注解,被IOC扫描...还有AOP例子的演示,有before after afterreturn afterthrow,还有around等的演示

    JavaEE AOP源码

    AOP 面向切面的编程思想。 Spring的主要特性之一,今天我整理了一下,小牛试刀,写了一个Demo分享给大家。 切面最主要的功能是在不影响主... 1、执行前通知- @Before 2、执行后通知- @After 3、环绕通知- @Around

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    Aspect自定义springboot的使用.docx

    通知有不同类型,包括"around","before"和"after"通知。许多AOP框架包括Spring,将通知建模成一个拦截器,并且围绕连接点维持一个拦截器链。 切入点(Pointcut):是指匹配连接点的一个断言。通知是和一个切入点...

    Javascript aop(面向切面编程)之around(环绕)分析

    Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知)、after(后置通知)、around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点。但是利用aop...

    SpringFramework中的面向方面编程(AOP),第二部分

    火龙果软件工程技术中心 在本系列的第一部分,我介绍了如何实现面向方面领域的“HelloWorld”:跟踪和记录方面。利用Spring框架所提供的面向...本文将描述around通知的每个特性,以便您可以在自己的SpringAOP应用程

    jsp编程技术复习题

    10.IoC和DI概念理解? IOC(Inverse of Control控制反转):从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后...答:Before、After-returning、After-throwing、Around、Introduction;

    java8源码-springboot_gradle_demos:spring-bootgradle演示

    java8 源码 所有项目demo都基于idea gradle + SpringBoot来开发构建 源代码见code目录,以及源码写的README.md,相关知识点如下...@AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行 @Before

    springboot学习思维笔记.xmind

    拦截规则@After @Before @Around PointCut JoinPoint Spring常用配置 Bean的Scope Singleton Prototype Request Session GlobalSession SpringEL和资源调用 注入普通字符 ...

Global site tag (gtag.js) - Google Analytics