Spring03.Aop: Aop(Xml)配置,Aop注解配置,spring_Aop综合案例,Aop底层原理分析

本文详细介绍了Spring AOP的概念、作用与优势,包括AOP的核心概念如连接点、切入点、通知和切面。通过XML配置和注解两种方式实践AOP,讲解了切入点表达式、通知类型以及动态代理的原理。同时,提供了AOP综合案例分析和底层原理,包括静态代理、JDK动态代理和CGLIB动态代理的比较,以及织入时机的探讨。
摘要由CSDN通过智能技术生成

课堂讲义

0)回顾Spring体系结构

Spring的两个核心:IoC和AOP

 

 

1)AOP简介

1.1)OOP开发思路

OOP规定程序开发以类为模型,一切围绕对象进行,OOP中完成某个任务首先构建模型,基于模型展开业务

 

 

1.2)AOP开发思想

 

 

解决的问题:将共性功能提取出去

1.3)AOP概念

  • AOP(Aspect Oriented Programing)面向切面编程,是一种编程范式,隶属于软件工程范畴。

  • AOP基于OOP基础之上进行横向开发,是对 OOP 编程方式的一种补充,并非是取而代之。

  • AOP不是由Spring提出的,最佳开源实现是AspectJ;Spring集成了AspectJ 实现AOP

1.4)AOP作用和优势

  • AOP能够将那些与业务无关,却为业务模块所共同调用的功能(例如日志记录、性能监控、事务管理、权限控制),封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于将来维护。

 

 

  • 伴随着AOP时代的降临,可以从各个行业的标准化、规范化开始入手,一步一步将所有共性功能逐一开发完毕,最终以功能组合来完成个别业务模块乃至整体业务系统的开发

2)AOP入门案例(重点)

2.1)AOP核心概念

 

 

 

 

  • Joinpoint(连接点):就是方法

  • Pointcut(切入点):就是挖掉共性功能的方法

  • Advice(通知):就是共性功能,最终以一个方法的形式呈现

  • Aspect(切面):就是共性功能与挖的位置的对应关系

  • Target(目标对象):就是挖掉功能的方法对应的类产生的对象,这种对象是无法直接完成最终工作的

  • Weaving(织入):就是将挖掉的功能回填的动态过程

  • Proxy(代理):目标对象无法直接完成工作,需要对其进行功能回填,通过创建原始对象的代理对象实现

2.2)AOP开发方式

  • 纯 XML方式

  • XML+注解方式

  • 纯 注解方式

2.3)入门案例制作

下面使用XML方式来开发:

1.导入aspectj的坐标

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>

2.确认要抽取的功能:并将其制作成方法保存到专用的类中,最后删除原始业务中对应的功能 

 

 

3.引入apo命名空间,然后将所有进行AOP操作的资源加载到IoC容器中

  • 引入aop命名空间

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/aop
            https://www.springframework.org/schema/aop/spring-aop.xsd">
        <!--3.开启AOP命名空间-->
  • 在applicationContextx.xml中配置userService和通知类AOPAdvice

    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>
    ​
    <!--2.配置共性功能成为spring控制的资源-->
    <bean id="myAdvice" class="com.itheima.aop.AOPAdvice"/>
  • 对比之前新增的改动 

 

 

4.使用配置的方式描述被抽取功能的位置,并描述被抽取功能与对应位置的关系

<!--aop配置-->
<aop:config>
    <!--配置切入点-->
    <aop:pointcut id="pt" expression="execution(* *..*(..))"/>
    <!--配置切面-->
    <aop:aspect ref="myAdvice">
        <!--通知与切入点之间的关系-->
        <aop:before method="logAdvice" pointcut-ref="pt"/>
    </aop:aspect>
</aop:config>

5.运行App类

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) ctx.getBean("userService");
userService.save();

 

2.4)AOP运行过程(理解)

  • Spring容器加载配置文件,监控所有配置的切入点方法的执行

  • 当监控到切入点方法被运行,使用代理机制,动态创建目标对象代理对象,然后在代理对象的对应位置将通知类对应的功能织入,完成完整的代码逻辑的运行

 

 

3)AOP配置(XML)

3.1)AspectJ

  • Aspect(切面)用于描述切入点与通知间的关系,是AOP编程中的一个重要概念

  • AspectJ基于java语言实现的AOP

3.2)AOP配置

3.2.1)aop:config

  • 名称:aop:config

  • 类型:标签

  • 归属:beans子标签

  • 作用:设置AOP

  • 格式:

    <beans>
        <aop:config>……</aop:config>
        <aop:config>……</aop:config>
    </beans>
  • 说明:一个beans标签中可以配置多个aop:config标签

3.2.2)aop:aspect

  • 名称:aop:aspect

  • 类型:标签

  • 归属:aop:config标签

  • 作用:设置具体的AOP通知对应的切入点

  • 格式:

    <bean id="myAdvice" class="com.itheima.aop.AOPAdvice"/>
    ​
    <aop:config>
        <aop:aspect ref="myAdvice">
            <aop:before method="before" pointcut-ref="pt"/>
        </aop:aspect>
    </aop:config>
  • 说明:

    一个aop:config标签中可以配置多个aop:aspect标签

  • 基本属性:

    • ref :通知类的beanId

3.2.3)aop:pointcut

  • 名称:aop:pointcut

  • 类型:标签

  • 归属:aop:config标签、aop:aspect标签

  • 作用:设置切入点

  • 格式:

    <aop:config>
        <aop:pointcut id="pt" expression="execution(* *..*(..))"/>
        
        <aop:aspect ref="myAdvice">
            <aop:before method="before" pointcut-ref="pt"/>
        </aop:aspect>
    </aop:config>
  • 说明:

    一个aop:config标签中可以配置多个aop:pointcut标签,且该标签可以配置在aop:aspect标签内

  • 基本属性:

    • id :识别切入点的名称

    • expression :切入点表达式

3.3)切入点

  • 切入点描述的是某个方法

  • 切入点表达式是一个快速匹配方法描述的通配格式,类似于正则表达式

3.4)切入点表达式的组成

  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值