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的配置的两种方式

相关推荐
ok!ko1 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2402_857589361 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰2 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer2 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
IT良2 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
哎呦没2 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
Kalika0-03 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch3 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
编程、小哥哥3 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
代码雕刻家3 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构