Spring 面向切面编程 XML 配置实现

Spring 支持AOP ,并且可以通过XML配置来实现。

bash 复制代码
<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"
       xmlns:context="http://www.springframework.org/schema/context"
       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
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 定义目标对象 -->
    
      <context:component-scan base-package="com" />
    

    <!-- 定义切面 -->
     <bean id="logAspect" class="com.aspect.LogAspect"></bean>
 
     <aop:config>
          <aop:aspect ref="logAspect">
              <aop:pointcut expression="execution(* com.service.impl.*.*(..))" id="myAspect" />
              <aop:before  method="beforePrintLog" pointcut-ref="myAspect"></aop:before>
              <aop:after  method="afterPrintLog" pointcut-ref="myAspect"></aop:after>
              <aop:after-throwing  method="afterThrowingPrintLog" pointcut-ref="myAspect"></aop:after-throwing>
          </aop:aspect>
     
     </aop:config>
</beans>

相关标签介绍:

aop:config 注明开始配置aop ,是配置的开始标签

aop:aspect 配置切面 ref 属性是引用相关切面类Bean的id

aop:point-cut 定义切点 expression 是具体的表达式 id 是切点的标识

aop:before 定义前置通知 method是要执行的方法 pointcut-ref为引用的aop-point-cut 定义的id

aop:after 定义最终通知

aop:around 定义环绕通知

aop:after-throwing 定义返回异常的通知

aop:after-returning 定义正常返回的通知

切面类:

java 复制代码
package com.aspect;

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

public class LogAspect {
	
	
	public void beforePrintLog() {
		System.out.println("LogAspectbeforePrintLog");
	}
	

	public void afterReturnPrintLog() {
		System.out.println("LogAspectafterReturnPrintLog");
	}
	
	
	public void afterThrowingPrintLog() {
		System.out.println("LogAspectafterThrowingPrintLog");
	}
	
	
	public void afterPrintLog() {
		System.out.println("LogAspectafterPrintLog");
	}
	
	
	public void aroundPrintLog() {
		System.out.println("aroundPrintLog");
	}
}

切点类必须是实现某个接口才行,SpringAOP代理实现机制包含Spring GGLIB 方式和JDK动态代理方式,默认的是JDK动态代理的方式,但是这种实现方式切点类我们的必须要实现某个接口 jdk9以及之后,切点类必须要实现接口

希望对你有所帮助!

相关推荐
新知图书几秒前
搭建Spring Boot开发环境
java·spring boot·后端
冰河团队5 分钟前
一个拉胯的分库分表方案有多绝望?整个部门都在救火!
java·高并发·分布式数据库·分库分表·高性能
洛_尘8 分钟前
Java EE进阶:Linux的基本使用
java·java-ee
宸津-代码粉碎机10 分钟前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
MaCa .BaKa13 分钟前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发
木子欢儿31 分钟前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
Devin~Y42 分钟前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
蜡台1 小时前
IDEA 一些 使用配置和插件
java·ide·intellij-idea
磊 子1 小时前
redis详解2
java·spring boot·redis
白露与泡影1 小时前
Java面试题库及答案解析(2026版)
java·开发语言·面试