首页 > 其他分享 >AOP的两个切面类组合的情况【SpringAOP】

AOP的两个切面类组合的情况【SpringAOP】

时间:2024-08-28 17:25:56浏览次数:13  
标签:AOP annotation 切面 org SpringAOP import public aspectj

在Spring AOP中,使用两个或多个切面类的组合是非常常见的使用方式。这种能让咱们将不同的关注点分离到不同的切面中,从而实现更高的模块化和可维护性

示例:假设我们有两个切面:LoggingAspect 和 TransactionAspect,分别用于记录日志和处理事务。

文章目录

1. 定义切面类

LoggingAspect:记录方法调用的日志

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.After;

@Aspect
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Before method: " + joinPoint.getSignature().getName());
    }

    @After("execution(* com.example.service.*.*(..))")
    public void logAfter(JoinPoint joinPoint) {
        System.out.println("After method: " + joinPoint.getSignature().getName());
    }
}

TransactionAspect:处理事务

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.After;

@Aspect
public class TransactionAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void beginTransaction() {
        System.out.println("Beginning transaction");
        // 开始事务的逻辑
    }

    @After("execution(* com.example.service.*.*(..))")
    public void commitTransaction() {
        System.out.println("Committing transaction");
        // 提交事务的逻辑
    }
}

2. 配置切面

在Spring配置中,需要将这些切面声明为Spring的bean,并启用AspectJ自动代理。
Spring配置文件(XML配置):

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- Enable AspectJ auto proxying -->
    <aop:aspectj-autoproxy />

    <!-- Define the LoggingAspect bean -->
    <bean id="loggingAspect" class="com.example.aspect.LoggingAspect" />

    <!-- Define the TransactionAspect bean -->
    <bean id="transactionAspect" class="com.example.aspect.TransactionAspect" />
</beans>

Spring配置类(Java配置):

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {

    @Bean
    public LoggingAspect loggingAspect() {
        return new LoggingAspect();
    }

    @Bean
    public TransactionAspect transactionAspect() {
        return new TransactionAspect();
    }
}

标签:AOP,annotation,切面,org,SpringAOP,import,public,aspectj
From: https://blog.csdn.net/qq_61905492/article/details/141645006

相关文章

  • AOP快速入门
    1需求分析案例设定:测算接口执行效率,但是这个案例稍微复杂了点,我们对其进行简化。简化设定:在方法执行前输出当前系统时间。对于SpringAOP的开发有两种方式,XML和注解总结需求为:使用SpringAOP的注解方式完成在方法执行的前打印出当前系统时间。2思路分析需求明确后,......
  • spring aop底层源码执行逻辑剖析
    aop动态代理源码剖析aop增强逻辑的执行时机是在initializeBean方法中protectedObjectinitializeBean(StringbeanName,Objectbean,@NullableRootBeanDefinitionmbd){ if(beanName.indexOf("my")>=0){ System.out.println("=============[initializeBean]bean......
  • AI创新,DataOps聚能 | 白鲸开源DTCC共话DataOps新篇章
    近日,由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办的第15届中国数据库技术大会(DTCC2024)隆重召开。大会以“自研创新数智未来”为主题,吸引了数百位行业专家和广大数据领域从业者共聚这场年度数据库技术交流盛宴,共同探讨新时代下数据库的技术动态和应用实践。作为全球领先......
  • 增量生成器(Incremental Generator)实现AOP代理
    本文介绍使用增量生成器生成AOP代理类nuget包安装dotnetaddpackageAutoAopProxyGenerator--version0.0.1该nuget包主要是为一些类生成对应的代理类,以便实现一些aop操作,例如异常处理、日志记录等等。该nuget包提供了3个attribute进行配置,以及一个接口AddAspectHandlerAt......
  • (javaweb)事务管理+AOP
    目录1.spring事务管理2.rollbackFor(异常回滚属性)3.propagation(事物传播行为)AOP基础1.AOP概述AOP快速入门AOP核心概念APO进阶1.通知类型2.通知顺序3.切入点表达式 4.连接点5.AOP案例1.spring事务管理spring的第二大核心:AOP(面向切面编程)IOC是第一大核心:控制......
  • SpringAOP使用详解
    AOP使用详解首先创建maven项目添加依赖在pom.xml里创建三层结构和spring.xml文件,只要用到注解就得写扫描包在spring.xml里上篇文章的知识点总结对上篇文章excution详细解释如果把前置通知修改成这个代表只有带有@Logger注解的才会生效合并注解的方法用&&在be......
  • 【Android】Android AOP 编程框架
    什么是AOP编程AOP编程全称AspectOrientedProgramming,面向切面编程主要功能是在不改变原代码的前提下,对特点代码节点进行修改,预处理,后期处理AOP的历史Android的AOP编程框架比较多,它们大多具备以下特点以AspectJ为基础,提供AOP编程能力AspectJ最早为Java项目中的编程框......
  • aop
    Logpackagecom.fh.annotation;importjava.lang.annotation.*;@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public@interface/*注解类*/Log{//模块名称Stringname();}Aspectpackagecom.fh......
  • 手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】【
    手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】【任务1-6整合版】引言:Spring框架的ioc容器、依赖注入、BeanPostProcessor后置处理器、AOP面向切面编程等特点为我们的开发带来了极大的便利,但是我们不能只学其中的api,更要懂得Spring的底......
  • 分享!! 如何自定义权限校验的注解并用AOP拦截实现权限校验
    CustomizepermissionverificationannotationandimplementitwithAOP详细步骤创建自定义注解自定义如下解释一下:@Target(ElementType.METHOD)//指定为method上使用的注解@Retention(RetentionPolicy.RUNTIME)//在运行时保留StringmustRole()default""//注......