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以及之后,切点类必须要实现接口

希望对你有所帮助!

相关推荐
无妄无望11 小时前
docker学习(4)容器的生命周期与资源控制
java·学习·docker
MC丶科12 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
千码君201612 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
夜白宋13 小时前
【word多文档docx合并】
java·word
@yanyu66613 小时前
idea中配置tomcat
java·mysql·tomcat
2501_9167665413 小时前
【项目部署】JavaWeb、MavenJavaWeb项目部署至 Tomcat 的实现方式
java·tomcat
RoboWizard13 小时前
扩容刚需 金士顿新款Canvas Plus存储卡
java·spring·缓存·电脑·金士顿
lang2015092814 小时前
Spring Boot 入门:5分钟搭建Hello World
java·spring boot·后端
失散1314 小时前
分布式专题——47 ElasticSearch搜索相关性详解
java·分布式·elasticsearch·架构
serve the people14 小时前
LangChain 表达式语言核心组合:Prompt + LLM + OutputParser
java·langchain·prompt