可以直接运行test
项目见附件
package com.xxp.aoptest.aspects;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class MyAspect {
@Pointcut(value="execution(* com.xxp.aoptest.programs.*.*(..)) && args(value)")//匹配com.xxp.aoptest.programs包中的所有类中的所有方法,并获得形参value
// @Pointcut(value="execution(* com.xxp.aoptest.programs.MyProgram.show(..))")//匹配com.xxp.aoptest.programs.MyProgram类中的所有show()方法(任意个参数) --pointcut2
// @Pointcut(value="execution(* com.xxp.aoptest.programs.MyProgram.show(String))")//匹配com.xxp.aoptest.programs.MyProgram类中的所有show(String value)方法 --pointcut3
public void showPoint(String value){}//声明切入点,方法名showPoint(value)为该切入点名称
/* 注意
* 如果不需要传递参数,则通知方法也要对应。(比如用以上pointcut3时,切入点也应修改为public void showPoint(){})
* */
@Before(value="showPoint(value)")//value值为切入点名称
public void doBefore(JoinPoint joinPoint,String value) throws Throwable{
System.out.println("before value="+value);
joinPoint.getArgs();//也可以用这个方法获得所有参数,这是就不需要在pointcut中使用args匹配了
}
@After(value="showPoint(value)")
public void doAfter(JoinPoint joinPoint,String value){
System.out.println("after value="+value);
}
@AfterReturning(value="showPoint(value)",returning="returnValue")
public void doAfterReturning(int returnValue,String value){
System.out.println("after returning:"+returnValue);
}
@AfterThrowing(value="showPoint(value)",throwing="error")
public void doAfterThrowing(JoinPoint joinPoint,Throwable error,String value){
System.out.println("error:"+error);
}
@Around("showPoint(value)")
public void doAround(ProceedingJoinPoint proceedingJoinPoint,String value) throws Throwable{
System.out.println("around start");
proceedingJoinPoint.proceed();
// proceedingJoinPoint.proceed(new Object[]{"reValue"});//将value的值改为reValue
System.out.println("around end");
}
}
package com.xxp.aoptest.programs;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyProgram {
@RequestMapping(value="/show",method=RequestMethod.GET)
@ResponseBody
public int show(String value){
System.out.println("MyProgram show("+value+")");
String test = "test";
if (value.equals("SB")) {
throw new RuntimeException();
}
value = "GNB";
return 1;
}
public int show(){
System.out.println("MyProgram show()");
String test = "test";
return 1;
}
}
分享到:
相关推荐
1、spring切入点 2、spring前置织入,传入参数处理 3、spring后置织入,传入参数处理 4、环绕织入,参数及返回值处理 5、返回后织入,返回值处理 6、异常织入,异常处理 maven环境下,测试用例可直接运行
标题“Spring Aop demo”指的是一个关于Spring框架的面向切面编程(Aspect Oriented Programming,简称AOP)的示例项目。在Spring框架中,AOP用于处理系统中的横切关注点,比如日志记录、事务管理、权限验证等,这些...
nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: ...
总的来说,"使用Maven管理Spring框架Demo"是一个综合实践,涵盖了Maven项目管理、Spring框架核心概念、Spring MVC以及Maven插件的使用。这不仅帮助开发者了解如何构建和管理Spring项目,还能提升对Java企业级应用...
通过这个Maven工程AOP实现的demo,我们学习了如何在Spring项目中使用注解进行AOP编程,包括定义切面、切入点、通知,并配置Spring以启用AOP。这种方式使得我们可以轻松地在不改动业务代码的情况下,插入横切关注点,...
在本实例中,我们主要探讨的是如何利用Maven构建一个基于Spring框架的Web应用程序,特别是关注Spring AOP(面向切面编程)在用户注册功能中的应用。Maven是一个强大的项目管理和依赖管理工具,它帮助开发者组织和...
<bean id="loggingAspect" class="com.example.aopdemo.aspect.LoggingAspect"/> ``` 这里`<aop:aspectj-autoproxy/>`启用基于注解的AOP代理,`<bean>`标签注册切面类。 #### 4. 创建服务接口和实现 创建一个...
另一方面,Spring AOP(面向切面编程)则是Spring框架的一个核心特性,用于实现跨切面的关注点,如日志记录。本篇文章将深入探讨如何将Swagger与Spring AOP结合起来,以实现优雅的日志记录功能。 首先,让我们了解...
在本文中,我们将通过一个简单的入门Demo来了解如何在Spring中使用AOP。首先,我们需要创建一个Maven项目,并添加相关的依赖。在`pom.xml`文件中,我们需要引入Spring的核心库、Spring的上下文库、Spring的AOP库以及...
这个"最新maven搭建的Spring MVC的demo"是一个很好的学习资源,它展示了如何使用Maven来构建一个简单的Spring MVC应用。通过这个例子,初学者可以了解Spring MVC的核心组件和Maven的项目构建流程,为后续深入学习和...
【标题】"基于maven的cxf+spring简单demo"是一个示例项目,它演示了如何结合Apache CXF和Spring框架来构建一个简单的Web服务。Apache CXF是一个开源的Java框架,主要用于创建、部署和管理Web服务。而Spring是另一个...
本文将详细讲解如何在Spring框架中引入并使用AOP(面向切面编程)特性,通过一个简单的小例子来帮助理解这一概念。 **Spring AOP概述** Spring AOP是Spring框架的一部分,它提供了面向切面编程的支持,允许我们在不...
本教程通过一个简单的Demo展示了如何将MyBatis、Spring和Maven这三个流行的技术结合使用。下面将详细介绍这个整合过程中的关键知识点。 首先,**MyBatis** 是一个优秀的持久层框架,它简化了数据库操作,通过SQL...
本文将深入探讨这个"mybatis+spring maven下整合完整demo"所涉及的关键知识点,帮助你理解如何在这样的环境中进行开发。 1. **MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...
在SSH Maven Demo中,Spring可能用于管理各个组件的生命周期,提供事务管理,并通过AOP实现跨切面的关注点,如日志、安全控制等。此外,Spring还提供了与Hibernate的集成,使得数据访问层的配置变得更加简单。 **...
这个ssmm_demo项目提供了一个基础的模板,可以帮助开发者快速搭建一个基于Spring、SpringMVC、MyBatis和Maven的Web应用,从而节省时间并提高开发效率。通过深入学习和实践,开发者可以更好地理解这些框架的协同工作...
在"Maven+Spring MVC"的Demo中,Maven负责管理项目的所有依赖,如Spring MVC、MyBatis以及其他的库。通过`pom.xml`文件,你可以定义项目依赖、插件和构建过程。Maven的生命周期包括编译、测试、打包、部署等阶段,...
【Spring AOP 实现】 Spring AOP,即Spring的面向切面编程,是一种编程范式,用于处理系统中的横切关注点,如日志、事务管理等,它将这些关注点与业务逻辑分离,提高了代码的可维护性和复用性。AOP在Spring框架中的...
- `pom.xml`:Maven配置文件,确保依赖了Spring AOP和其他必要的库。 - `src/main/java`:包含切面类、业务类和其他组件的Java源代码。切面类会定义切点、通知和可能的引入,而业务类是被切面所影响的代码。 - `...