`
千年松鼠
  • 浏览: 25843 次
文章分类
社区版块
存档分类
最新评论

Spring AOP demo (maven)

阅读更多
可以直接运行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;
	}
	
	
	
}
分享到:
评论

相关推荐

    spring aop demo

    1、spring切入点 2、spring前置织入,传入参数处理 3、spring后置织入,传入参数处理 4、环绕织入,参数及返回值处理 5、返回后织入,返回值处理 6、异常织入,异常处理 maven环境下,测试用例可直接运行

    Spring Aop demo

    标题“Spring Aop demo”指的是一个关于Spring框架的面向切面编程(Aspect Oriented Programming,简称AOP)的示例项目。在Spring框架中,AOP用于处理系统中的横切关注点,比如日志记录、事务管理、权限验证等,这些...

    springAOP demo 带错误解决文档

    nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: ...

    使用Maven管理Spring框架Demo

    总的来说,"使用Maven管理Spring框架Demo"是一个综合实践,涵盖了Maven项目管理、Spring框架核心概念、Spring MVC以及Maven插件的使用。这不仅帮助开发者了解如何构建和管理Spring项目,还能提升对Java企业级应用...

    maven工程AOP实现demo

    通过这个Maven工程AOP实现的demo,我们学习了如何在Spring项目中使用注解进行AOP编程,包括定义切面、切入点、通知,并配置Spring以启用AOP。这种方式使得我们可以轻松地在不改动业务代码的情况下,插入横切关注点,...

    Maven 项目 Spring Aop 用户注册 实例 代码.rar

    在本实例中,我们主要探讨的是如何利用Maven构建一个基于Spring框架的Web应用程序,特别是关注Spring AOP(面向切面编程)在用户注册功能中的应用。Maven是一个强大的项目管理和依赖管理工具,它帮助开发者组织和...

    最简单的SpringAOP入门案例

    <bean id="loggingAspect" class="com.example.aopdemo.aspect.LoggingAspect"/> ``` 这里`<aop:aspectj-autoproxy/>`启用基于注解的AOP代理,`<bean>`标签注册切面类。 #### 4. 创建服务接口和实现 创建一个...

    swagger和spring Aop日志结合

    另一方面,Spring AOP(面向切面编程)则是Spring框架的一个核心特性,用于实现跨切面的关注点,如日志记录。本篇文章将深入探讨如何将Swagger与Spring AOP结合起来,以实现优雅的日志记录功能。 首先,让我们了解...

    Spring AOP入门Demo分享

    在本文中,我们将通过一个简单的入门Demo来了解如何在Spring中使用AOP。首先,我们需要创建一个Maven项目,并添加相关的依赖。在`pom.xml`文件中,我们需要引入Spring的核心库、Spring的上下文库、Spring的AOP库以及...

    最新maven搭建的Spring mvc的demo

    这个"最新maven搭建的Spring MVC的demo"是一个很好的学习资源,它展示了如何使用Maven来构建一个简单的Spring MVC应用。通过这个例子,初学者可以了解Spring MVC的核心组件和Maven的项目构建流程,为后续深入学习和...

    基于maven的cxf+spring简单demo

    【标题】"基于maven的cxf+spring简单demo"是一个示例项目,它演示了如何结合Apache CXF和Spring框架来构建一个简单的Web服务。Apache CXF是一个开源的Java框架,主要用于创建、部署和管理Web服务。而Spring是另一个...

    Spring引入demo

    本文将详细讲解如何在Spring框架中引入并使用AOP(面向切面编程)特性,通过一个简单的小例子来帮助理解这一概念。 **Spring AOP概述** Spring AOP是Spring框架的一部分,它提供了面向切面编程的支持,允许我们在不...

    MyBatis+Spring+Maven的简单整合Demo

    本教程通过一个简单的Demo展示了如何将MyBatis、Spring和Maven这三个流行的技术结合使用。下面将详细介绍这个整合过程中的关键知识点。 首先,**MyBatis** 是一个优秀的持久层框架,它简化了数据库操作,通过SQL...

    mybatis+spring maven下 整合 完整demo

    本文将深入探讨这个"mybatis+spring maven下整合完整demo"所涉及的关键知识点,帮助你理解如何在这样的环境中进行开发。 1. **MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...

    sshmaven的demo

    在SSH Maven Demo中,Spring可能用于管理各个组件的生命周期,提供事务管理,并通过AOP实现跨切面的关注点,如日志、安全控制等。此外,Spring还提供了与Hibernate的集成,使得数据访问层的配置变得更加简单。 **...

    spring springMVC mybatis maven

    这个ssmm_demo项目提供了一个基础的模板,可以帮助开发者快速搭建一个基于Spring、SpringMVC、MyBatis和Maven的Web应用,从而节省时间并提高开发效率。通过深入学习和实践,开发者可以更好地理解这些框架的协同工作...

    java框架maven+springmvc的demo

    在"Maven+Spring MVC"的Demo中,Maven负责管理项目的所有依赖,如Spring MVC、MyBatis以及其他的库。通过`pom.xml`文件,你可以定义项目依赖、插件和构建过程。Maven的生命周期包括编译、测试、打包、部署等阶段,...

    SpringAOP实现.docx

    【Spring AOP 实现】 Spring AOP,即Spring的面向切面编程,是一种编程范式,用于处理系统中的横切关注点,如日志、事务管理等,它将这些关注点与业务逻辑分离,提高了代码的可维护性和复用性。AOP在Spring框架中的...

    spring aop 示例

    - `pom.xml`:Maven配置文件,确保依赖了Spring AOP和其他必要的库。 - `src/main/java`:包含切面类、业务类和其他组件的Java源代码。切面类会定义切点、通知和可能的引入,而业务类是被切面所影响的代码。 - `...

Global site tag (gtag.js) - Google Analytics