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>
目录
相关文章
|
2月前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
61 5
|
2月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
2月前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
47 5
|
2月前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
46 4
|
4月前
Micronaut AOP与代理机制:实现应用功能增强,无需侵入式编程的秘诀
AOP(面向切面编程)能够帮助我们在不修改现有代码的前提下,为应用程序添加新的功能或行为。Micronaut框架中的AOP模块通过动态代理机制实现了这一目标。AOP将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,提高模块化程度。在Micronaut中,带有特定注解的类会在启动时生成代理对象,在运行时拦截方法调用并执行额外逻辑。例如,可以通过创建切面类并在目标类上添加注解来记录方法调用信息,从而在不侵入原有代码的情况下增强应用功能,提高代码的可维护性和可扩展性。
84 1
|
2月前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
168 1
什么是AOP面向切面编程?怎么简单理解?
|
2月前
|
XML Java 开发者
论面向方面的编程技术及其应用(AOP)
【11月更文挑战第2天】随着软件系统的规模和复杂度不断增加,传统的面向过程编程和面向对象编程(OOP)在应对横切关注点(如日志记录、事务管理、安全性检查等)时显得力不从心。面向方面的编程(Aspect-Oriented Programming,简称AOP)作为一种新的编程范式,通过将横切关注点与业务逻辑分离,提高了代码的可维护性、可重用性和可读性。本文首先概述了AOP的基本概念和技术原理,然后结合一个实际项目,详细阐述了在项目实践中使用AOP技术开发的具体步骤,最后分析了使用AOP的原因、开发过程中存在的问题及所使用的技术带来的实际应用效果。
72 5
|
4月前
Micronaut AOP与代理机制:实现应用功能增强,无需侵入式编程的秘诀
【9月更文挑战第9天】AOP(面向切面编程)通过分离横切关注点提高模块化程度,如日志记录、事务管理等。Micronaut AOP基于动态代理机制,在应用启动时为带有特定注解的类生成代理对象,实现在运行时拦截方法调用并执行额外逻辑。通过简单示例展示了如何在不修改 `CalculatorService` 类的情况下记录 `add` 方法的参数和结果,仅需添加 `@Loggable` 注解即可。这不仅提高了代码的可维护性和可扩展性,还降低了引入新错误的风险。
54 13
|
3月前
|
Java 容器
AOP面向切面编程
AOP面向切面编程
49 0
|
5月前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解