package com.skss.portal.service;
import java.lang.reflect.Method;
import org.aspectj.lang.JoinPoint;
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.aop.ThrowsAdvice;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import com.skss.portal.entity.TbRole;
/**
* spring aop中 @Around和@AfterThrowing 不兼容,这是spring自身的bug
*/
@Component("serviceAspect")
// 申明这是一个组件
@Aspect
// 申明这是一个切面
public class ServiceAspect implements ThrowsAdvice {
//配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点
@Pointcut("execution(* com.skss.portal.service..*(..))")
public void aspect() {
};
/*
* 配置前置通知,使用在方法aspect()上注册的切入点
* 同时接受JoinPoint切入点对象,可以没有该参数
*/
@Before("aspect()")
public void before(JoinPoint joinPoint) {
System.out.println("aspect before");
}
//配置后置通知,使用在方法aspect()上注册的切入点
@After("aspect()")
public void after(JoinPoint joinPoint) {
System.out.println("aspect after");
}
// 配置后置返回通知,使用在方法aspect()上注册的切入点
@AfterReturning("aspect()")
public void afterReturn(JoinPoint joinPoint) {
System.out.println("aspect afterReturn");
}
// 配置抛出异常后通知,使用在方法aspect()上注册的切入点
@AfterThrowing(pointcut = "aspect()", throwing = "ex")
public void afterThrow(JoinPoint joinPoint, Exception ex) {
System.out.println("aspect afterThrow....:" + ex);
}
/*
* public void afterThrowing(Method method, Object[] arts, Object target,
* RuntimeException throwable) { System.out.println("have exception"); }
*/
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(
"com/skss/portal/config/applicationContext.xml");
RoleService roleAction = (RoleService) app
.getBean("service.roleService");
roleAction.tt();
}
}
分享到:
相关推荐
SpringBoot结合AspectJ实现SpringAOP拦截指定方法的知识点涵盖了多个方面,这包括Spring AOP的基本概念、SpringBoot的应用、切点(Pointcut)与通知(Advice)的定义、自定义注解以及AspectJ的使用。以下是这些知识...
本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...
这个“spring AOP拦截方法小示例”是一个实际应用,展示了如何使用Spring AOP来拦截特定层的所有方法,并在调用前后以及出现异常时执行自定义逻辑。 首先,让我们了解AOP的基本概念。AOP的核心是切面(Aspect),它...
"springaop拦截controller日志"这个主题旨在讲解如何使用Spring AOP来拦截Controller层的方法调用,并在方法执行前后记录相关日志。 首先,了解Spring AOP的基本概念。AOP是一种编程范式,它允许程序员定义“切面”...
在提供的压缩包中,可能包含了一个或多个测试类(Tests),这些测试类通常用来验证AOP拦截器的功能。它们可能包含模拟业务场景的方法,这些方法会被切面拦截并执行相应的通知。通过运行这些测试,我们可以确保AOP...
标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...
在Spring AOP中,我们可以定义一个`@Aspect`类,这个类包含若干个`@Before`,`@After`,`@Around`等注解的方法,这些方法会在相应的切点(pointcut)执行前、后或周围执行。在数据脱敏的场景下,我们可能需要在响应...
即使你没有直接使用AspectJ语法编写切面,Spring的AOP代理也可以利用这个库进行代理对象的创建,以实现方法调用前后的通知(advises)。这个库对于那些希望在不改变源代码的情况下,通过AOP增强已有类的行为的开发者...
总的来说,Spring AOP 拦截器 Advisor 是一种强大的工具,它允许我们在不修改目标代码的情况下插入额外的行为。通过合理地定义 Advice 和 Pointcut,我们可以实现灵活的横切关注点,如日志、性能监控、事务管理和...
本例提供了一个简单的AOP拦截器实现,我们可以从这个基础出发,深入理解和探讨AOP的核心概念、工作原理以及其在实际开发中的应用。 首先,AOP的主要目标是解决程序中的横切关注点,如日志记录、事务管理、性能监控...
具体到Spring AOP拦截器的代码实现,本文通过创建TestInterceptor类来演示。这个类继承自HandlerInterceptorAdapter,然后重写其中的afterCompletion、postHandle等方法。在这个类中,可以在相应方法中添加自定义的...
例如,可能会有一个自定义的MyBatis拦截器用于分页查询,一个Spring AOP切面用于记录操作日志,Spring事务管理确保数据的一致性,而反射工具类可能用于动态加载配置或处理某些通用的反射任务。通过这些组件的组合,...
Spring AOP 是一种面向切面编程的技术,它允许我们在不修改源代码的情况下,对应用程序的特定部分(如方法调用)进行增强。在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态...
// 获取被拦截方法的简单名称 String methodName = joinPoint.getSignature().getName(); // 记录方法开始信息 logger.info("开始执行方法:" + methodName); // 调用被拦截的方法 Object result = ...
代理对象在调用目标方法时会执行切面逻辑。 2. **织入**:织入是将切面与应用程序代码结合的过程。Spring支持三种织入时机:编译时、加载时和运行时。在本示例中,我们主要关注运行时织入,即在Spring容器启动时...
通过以上步骤,我们就完成了使用Spring AOP拦截并记录系统操作日志和异常日志的过程。在实际项目中,可以根据需求调整切点表达式,优化日志格式,以及对日志进行分类和分级存储。这样的设计使得日志管理变得灵活且...
SSH2 登录与 Spring AOP 拦截是两种在 IT 领域中常见的技术,主要用于提升系统安全性和管理效率。SSH2(Secure Shell version 2)是一种网络协议,用于提供安全的远程登录和数据传输,而 Spring AOP(Aspect ...
本实例将详细探讨如何通过注解(Annotation)来实现Spring AOP的方法拦截。 一、Spring AOP基础 Spring AOP是Spring框架的一部分,它提供了一种在运行时织入横切关注点(如日志、事务管理等)到目标对象的能力。AOP...
这篇博客文章“Spring Aop Advise方法(增强方法) 中获取目标方法的参数”可能详细解释了如何在Advise中获取被拦截方法的参数。为了深入理解这个主题,我们需要探讨以下几个关键知识点: 1. **AOP的基本概念**: - ...
在Spring AOP中,我们无需深入到每个方法的实现细节,而是可以定义“切面”,在合适的时机(如方法调用前、后、异常发生时等)执行特定的逻辑。这样,业务代码和关注点(如日志、事务管理等)得以分离,提高了代码的...