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管理

目标类

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

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

增强类

//增强类 切面类
public class MyAdvice {

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

    public void afterAdvice() {

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

配置给Spring管理

<?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:配置织入(切点被哪些方法增强,是前置增强还是后置增强)

 <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:可以把切面表达式直接写入

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

切点表达式的配置语法

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

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

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

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

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

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

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

//表示访问修饰符为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的配置的两种方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值