package com.xcl.common;
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;
@Aspect //用来指明这个类是切面
public class MyInterceptor {
//切入点:拦截com.impl.PersonServiceBean类下面的所有方法
//@Pointcut("execution(* com.xcl.web.action..*.*(..))")//匹配任意类型 com.xcl.web.action包以及子包下面的所有类的所有任意参数的方法
@Pointcut("execution(* com.xcl.service.impl.PersonServiceBean.*(..))")
private void anyMethod() {}//声明一个切入点
//前置通知:拦截到某个类后,先执行前置通知
//如果加args(userName),测只能拦截方法的参数为string类型的,且只有一个参数的方法
@Before("anyMethod() && args(userName)")
public void doBeforeAdvice(String userName) {
System.out.println("我是前置通知" + userName);
}
//@AfterReturning("anyMethod()")//如果不需要返回值,可以这个设置
@AfterReturning(pointcut="anyMethod()", returning="result")
public void doAfterAdvice(String result) {
System.out.println("我是后置通知" + result);
}
@After("anyMethod()")
public void doFinallyAdvice() {
System.out.println("我是最终通知");
}
//@AfterThrowing("anyMethod()")
@AfterThrowing(pointcut="anyMethod()", throwing="e")
public void doExceptionAdvice(Exception e){
System.out.println("我是例外通知,即异常通知"+ e);
}
//环绕通知可以替代上面的所有通知,完成一个完整的权限拦截的过程
@Around("anyMethod()")
public Object doAroundProfiling(ProceedingJoinPoint pjp) throws Throwable {
//如果我们使用环绕通知,必须要在环绕通知内部执行下面的这个方法
//如果不执行这个方法,那么业务bean中被拦截的方法是不会执行的
//在执行这个方法的时候,如果后面还有其他切面,执行是顺序是这样的:
//先执行后面的切面,如果后面没有切面,再执行最终的目标对象的业务方法,
//如果你不调用这个方法,后面的切面及这个业务bean的方法都不会会执行
Object result = null;
if (true) {
//前置通知
try {
result = pjp.proceed();
//后置通知
} catch (Exception ex) {
// 例外通知
} finally {
//最终通知
}
}
return result;
}
}
分享到:
相关推荐
在讨论Spring AOP(面向切面编程)时,首先需要理解几个核心概念。Spring AOP 是Spring框架提供的一个功能模块,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中解耦出来,通过在方法调用前后进行...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的核心概念是切面(Aspect)、通知(Advice)、连接点...
**Spring AOP编程实例** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的核心特性之一,它提供了一种在不修改原有代码的情况下,通过插入额外的行为(如日志、事务管理等)来增强功能的...
### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程...
【Spring AOP编程】是Java开发中的一个重要概念,它代表了面向切面编程(Aspect-Oriented Programming)在Spring框架中的应用。AOP的核心思想是将关注点分离,即将横切关注点(如日志、事务管理、安全性等)与核心...
在Java开发领域,Spring框架是不可或缺的一部分,而Spring AOP(面向切面编程)则是Spring框架中的重要特性,它提供了一种优雅的方式来处理系统中的横切关注点,如日志、事务管理等。本篇文章将深入探讨如何通过XML...
在Java EE环境中,Spring框架是企业级应用开发的首选,其中Spring AOP(Aspect-Oriented Programming,面向切面编程)是其核心组件之一。面向切面编程是一种编程范式,旨在提高代码的可重用性和模块化,通过将关注点...
在本文档中,作者田超凡探讨了Spring AOP(面向切面编程)的实现,主要涉及了两种代理模式:静态代理和JDK动态代理。这两种代理方式都是为了实现AOP的核心理念,即在不修改原有业务代码的情况下,对代码进行横切关注...
Spring AOP 编程 Spring AOP(Aspect-Oriented Programming,面向切面编程)是一种编程技术,它可以将横切关注点从核心业务逻辑中分离出来,提高系统的可维护性、可扩展性和灵活性。AOP 是 OOP 的补充和完善,可以...
### Spring AOP面向切面编程详解 #### 一、引言 面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,旨在提高软件的模块化程度,简化程序设计并解决横切关注点(Cross-cutting Concerns)的问题...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个"spring aop jar 包"包含了实现这一功能所需的类和接口,...
在Java编程领域,Spring AOP(面向切面编程)是一种强大的设计模式,它允许程序员将关注点分离到单独的模块,这些模块可以独立于主业务逻辑进行管理。本教程将重点讲解如何通过注解方式来实现Spring AOP,并提供相关...
实战示例
Spring AOP,全称为Aspect Oriented Programming,是面向切面编程的一种编程范式,它是对传统的面向对象编程(OOP)的一种补充。在OOP中,核心是对象,而在AOP中,核心则是切面。切面是关注点的模块化,即程序中的...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
在本篇博客“Spring基础:AOP编程(4)”中,我们将深入探讨Spring框架中的面向切面编程(Aspect-Oriented Programming,简称AOP),这是一个强大的功能,它允许我们在不修改原有业务代码的情况下,实现对系统中横切...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...