10Spring - 基于AspectJ的AOP开发 (XML的方式)

简介: 10Spring - 基于AspectJ的AOP开发 (XML的方式)

基于AspectJ的AOP开发

AOP开发中的相关术语

  • JoinPoint(连接点): 所谓的连接点是指那些被拦截到的点。在Spring中,这些带你指的是方法,因为Spring只支持方法类型的连接点。
  • Pointcut(切入点): 所谓切入点是指我们要对Joinpoint进行拦截的定义
  • Advice(通知/增强): 所谓通知是指拦截到Joinpoint之后所要做的事情就是通知,通知分为前置通知、后置通知、异常通知、最终通知、环绕通知(切面要完成的功能)
  • Introduction(引介): 引介是一种特殊的通知在不修改类代码的前提下,Introduction可以运行期为类动态地添加一些方法或Field。
  • Target(目标对象): 代理的目标对象
  • Weaving(织入): 是指把增强应用到目标对象来创建新的代理对象的过程,Spring采取动态代理织入,而AspectJ采用编译期织入和类装载期织入
  • Proxy(代理): 一个类被AOP织入增强后,就产生一个结果代理类
  • Aspect(切面): 是切入点和通知(引介)的结合

Spring使用AspectJ进行AOP开发(XML方式)

1)引入相应的jar包

2)引入Spring配置文件

引入 AOP 约束:
<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">
</beans>

3)编写目标类

public class OrderDaoImpl implements OrderDao {
    @Override
    public void save() {
        System.out.println("保存订单...");
    }
    @Override
    public void update() {
        System.out.println("修改订单...");
    }
    @Override
    public void delete() {
        System.out.println("删除订单...");
    }
    @Override
    public void find() {
        System.out.println("查询订单...");
    }
}

4)目标类的配置

<!-- 目标类================ -->
<bean id="orderDao" class="cn.itcast.spring.demo3.OrderDaoImpl"></bean>

5)Junit测试

引入 spring-test.jar
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDemo3 {
    @Resource(name = "orderDao")
    private OrderDao orderDao;
    @Test
    public void demo1() {
        orderDao.save();
        orderDao.update();
        orderDao.delete();
        orderDao.find();
    }
}

6)通知类型

  • 前置通知 :在目标方法执行之前执行.
  • 后置通知 :在目标方法执行之后执行
  • 环绕通知 :在目标方法执行前和执行后执行
  • 异常抛出通知:在目标方法执行出现 异常的时候 执行
  • 最终通知 :无论目标方法是否出现异常 最终通知都会 执行.

7)切入点表达式

execution(表达式)

表达式:

[方法访问修饰符] 方法返回值 包名.类名.方法名(方法的参数)

public * cn.itcast.spring.dao..(…)

  • cn.itcast.spring.dao..(…)
  • cn.itcast.spring.dao.UserDao+.*(…)
  • cn.itcast.spring.dao….(…)

8)编写一个切面类

public class MyAspectXml {
    // 前置增强
    public void before() {
        System.out.println("前置增强===========");
    }
}

9)配置完成增强

<!-- 配置切面类 -->
        <bean id="myAspectXml" class="cn.itcast.spring.demo3.MyAspectXml"></bean>
        <!-- 进行 aop 的配置 -->
        <aop:config>
            <!-- 配置切入点表达式:哪些类的哪些方法需要进行增强 -->
            <aop:pointcut  expression="execution(*cn.itcast.spring.demo3.*Dao.save(..))" id="pointcut1"/>
            <aop:pointcut  expression="execution(*cn.itcast.spring.demo3.*Dao.delete(..))" id="pointcut2"/>
            <aop:pointcut  expression="execution(*cn.itcast.spring.demo3.*Dao.update(..))" id="pointcut3"/>
            <aop:pointcut  expression="execution(*cn.itcast.spring.demo3.*Dao.find(..))" id="pointcut4"/>
            <!-- 配置切面 -->
            <aop:aspect ref="myAspectXml">
                <aop:before method="before" pointcut-ref="pointcut1"/>
                <aop:after-returning  method="afterReturing" pointcut-ref="pointcut2"/>
                <aop:around method="around" pointcut-ref="pointcut3"/>
                <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4"/>
                <aop:after method="after" pointcut-ref="pointcut4"/>
            </aop:aspect>
        </aop:config>
目录
相关文章
|
7月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
7753 109
|
9月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
698 0
|
7月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
8月前
|
安全 数据可视化 Java
AiPy开发的 Spring 漏洞检测神器,未授权访问无所遁形
针对Spring站点未授权访问问题,现有工具难以检测如Swagger、Actuator等组件漏洞,且缺乏修复建议。全新AI工具基于Aipy开发,具备图形界面,支持一键扫描常见Spring组件,自动识别未授权访问风险,按漏洞类型标注并提供修复方案,扫描结果可视化展示,支持导出报告,大幅提升渗透测试与漏洞定位效率。
|
9月前
|
缓存 Java API
Spring WebFlux 2025 实操指南详解高性能非阻塞 API 开发全流程核心技巧
本指南基于Spring WebFlux 2025最新技术栈,详解如何构建高性能非阻塞API。涵盖环境搭建、响应式数据访问、注解与函数式两种API开发模式、响应式客户端使用、测试方法及性能优化技巧,助你掌握Spring WebFlux全流程开发核心实践。
1534 0
|
9月前
|
存储 NoSQL Java
探索Spring Boot的函数式Web应用开发
通过这种方式,开发者能以声明式和函数式的编程习惯,构建高效、易测试、并发友好的Web应用,同时也能以较小的学习曲线迅速上手,因为这些概念与Spring Framework其他部分保持一致性。在设计和编码过程中,保持代码的简洁性和高内聚性,有助于维持项目的可管理性,也便于其他开发者阅读和理解。
258 0
|
11月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
1402 1
|
8月前
|
XML 安全 Java
使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
794 0
|
7月前
|
监控 Java Spring
AOP 切面编程
AOP(面向切面编程)通过动态代理在不修改源码的前提下,对方法进行增强。核心概念包括连接点、通知、切入点、切面和目标对象。常用于日志记录、权限校验、性能监控等场景,结合Spring AOP与@Aspect、@Pointcut等注解,实现灵活的横切逻辑管理。
1897 6
AOP 切面编程
|
7月前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。

热门文章

最新文章