XML方式AOP快速入门XML方式AOP配置详解

目录

1.XML方式AOP快速入门

1:导入AOP相关坐标

2:准备目标类,准备增强类,并配置给Spring管理

3:配置切点表达式(那些方法要被增强)

4:配置织入(切点被哪些方法增强,是前置增强还是后置增强)

2.XML方式AOP配置详解

2.1切点表达式的配置方式

切点表达式的配置语法

2.3通知的类型

AOP的配置的两种方式


1.XML方式AOP快速入门

1:导入AOP相关坐标

2:准备目标类,准备增强类,并配置给Spring管理

目标类

java 复制代码
目标类
public class UserServiceImpl implements UserService {
    @Override
//目标方法
    public void show1() {
        System.out.println("show1");
    }

    @Override
    public void show2() {
        System.out.println("show2");
    }
}

增强类

java 复制代码
//增强类 切面类
public class MyAdvice {

    //切面方法 也叫通知   这就是需要增强的代码(通知)
    public void beforeAdvice() {
        System.out.println("before advice");
    }

    public void afterAdvice() {

        System.out.println("after advice");
    }

配置给Spring管理

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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
">
    <bean id="userService" class="com.hu.service.impl.UserServiceImpl"></bean>
    <bean id="myAdvice" class="com.hu.proxy.MyAdvice"></bean>

3:配置切点表达式(那些方法要被增强)

4:配置织入(切点被哪些方法增强,是前置增强还是后置增强)

XML 复制代码
 <aop:config>
        <aop:pointcut id="pointcut01" expression="execution(void com.hu.service.impl.UserServiceImpl.show1())"/>
        <aop:aspect ref="myAdvice">
            <aop:before method="beforShow" pointcut-ref="pointcut01"></aop:before>
            <aop:after-returning method="afterShow" pointcut-ref="pointcut01"></aop:after-returning>

            <aop:before method="beforShow" pointcut="execution(void com.hu.service.impl.UserServiceImpl.show2())"></aop:before>
            <aop:after-returning method="afterShow" pointcut="execution(void com.hu.service.impl.UserServiceImpl.show2())"></aop:after-returning>

        </aop:aspect>
    </aop:config>
    <!--忽略默认的jdk动态代理 -->
    <aop:aspectj-autoproxy  proxy-target-class="true"/>

<aop:aspectj-autoproxy proxy-target-class="true"/> 开启自动代理之后,凡事带有@Aspect注解的bean都会生成代理对象。

proxy-target-class="true" 表示采用cglib动态代理。

proxy-target-class="false" 表示采用jdk动态代理。默认值是false。即使写成false,当没有接口的时候,也会自动选择cglib生成代理类

2.XML方式AOP配置详解

2.1切点表达式的配置方式

细节1:可以把切面表达式直接写入

XML 复制代码
 <aop:after method="afterAdvice" pointcut="execution(void com.rocky.service.Impl.UserServiceImpl.show2())"></aop:after>

切点表达式的配置语法

切点表达式是配置要对哪些连接点(哪些类的哪些方法)进行通知的增强,语法如下:

XML 复制代码
execution([访问修饰符] 返回值类型 包名.类名.方法名(参数))
  • 访问修饰符可以省略不写;

  • 返回值类型,某一级包名,类名,方法名 可以使用*表示任意;

  • 包名与类名之间使用单点.表示该包下的类,使用双点..表示该包及其子包下的类;

  • 参数列表可以使用两个点..表示任意参数

XML 复制代码
 <aop:pointcut id="pointcut01" expression="execution(void com.rocky.service..UserServiceImpl.show1())"/>

切点表达式举几个大家容易理解的例子

XML 复制代码
//表示访问修饰符为public、无返回值、在com.rocky.aop包下的TargetImpl类的无参方法show execution(public void com.rocky.aop.TargetImpl.show())
//表述com.rocky.aop包下的TargetImpl类的任意方法 
execution(* com.rocky.aop.TargetImpl.*(..)) 
//表示com.rocky.aop包下的任意类的任意方法 
execution(* com.rocky.aop.*.*(..)) 
//表示com.rocky.aop包及其子包下的任意类的任意方法 
execution(* com.rocky.aop..*.*(..)) 
//表示任意包中的任意类的任意方法 execution(* *..*.*(..))

2.3通知的类型

AOP的配置的两种方式

相关推荐
填满你的记忆5 小时前
【从零开始——Redis 进化日志|Day5】分布式锁演进史:从 SETNX 到 Redisson 的完美蜕变
java·数据库·redis·分布式·缓存
lendsomething5 小时前
Spring 多数据源事务管理,JPA为例
java·数据库·spring·事务·jpa
Never_Satisfied5 小时前
在JavaScript / HTML中,HTML元素自定义属性使用指南
开发语言·javascript·html
Ulyanov5 小时前
大规模战场数据与推演:性能优化与多视图布局实战
开发语言·python·性能优化·tkinter·pyvista·gui开发
nsjqj5 小时前
JavaEE初阶:多线程初阶(2)
java·开发语言
明天…ling5 小时前
php底层原理与安全漏洞实战
开发语言·php
爱说实话5 小时前
C# DependencyObject类、Visual类、UIElement类
开发语言·c#
智码未来学堂5 小时前
C语言指针:打开通往内存世界的大门
c语言·开发语言
黎雁·泠崖5 小时前
Java面向对象:对象数组核心+综合实战
java·开发语言
Mr.LJie5 小时前
记录使用iText7合并PDF文件、PDF发票、PDF火车票
java·pdf