• 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: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">

    <!--配置spring的ioc,把service对象配置进来-->
    <bean id="accountService" class="com.hope.service.impl.AccountService"></bean>

    <!--spring中基于xml的AOP配置步骤
    1、把通知bean交给spring来管理
    2、使用aop:config标签表明开始AOP的配置
    3、使用aop:aspect标签表明配置切面
    id属性:给切面提供一个唯一标识。
    ref属性:是指定通知类bean的id。
    4、在aop:aspect标签的内部来配置通知的类型
    我们现在示例是让printLog方法在切入点方法之前,所以是前置通知
    aop:before 表示配置前置通知
    method属性:用于指定Logger类中哪个方法是前置通知
    pointcut属性:用于指定切入点表达式,该表达式的含义指的是对业务层中哪些方法增强。
    标准的表达式写法:
    public void com.hope.srvice.impl.AccountServiceImpl.saveAccount()
    访问修饰符可以省略
    void com.hope.srvice.impl.AccountServiceImpl.saveAccount()
    返回值类型可以使用通配符,表示任意类型
    * com.hope.srvice.impl.AccountServiceImpl.saveAccount()
    包名可以使用通配符,表示任意包,但是有几级包,就需要写几个*
    * *.*.*.*.AccountServiceImpl.saveAccount()
    包名可以使用..表示当前包及其子包
    * *..AccountServiceImpl.saveAccount()
    类名和方法名都可以使用*表示通配
    * *..*.*()
    参数列表:
    可以直接写数据类型:
    基本数据类型直接写名称(int)
    引用数据类型写包名.类名的方式(java.lang.String)
    可以使用通配符的方式表示任意类型,但是必须是有参数
    可以使用.. 表示有误参数均可,有参数是任意类型。
    全通配写法:
    * *..*.*(..)
    实际开发中切入点的表达式的通常写法:
    切到业务层实现类的所有方法
    * com.hope.service.impl.*.*(..)
    -->
    <!--配置logger类-->
    <bean id="logger" class="com.hope.utils.Logger"></bean>
    <!--配置AOP-->
    <aop:config>
    <!--配置切面-->
    <aop:aspect id="logAdvice" ref="logger">
    <!--配置通知的类型,并且建立通知方法和切入点方法的关联-->
    <!--<aop:before method="printLog" pointcut="execution(public void com.hope.service.impl.AccountService.saveAccount())"></aop:before>-->
    <!--<aop:before method="printLog" pointcut="execution(void com.hope.service.impl.AccountService.saveAccount())"></aop:before>-->
    <!--<aop:before method="printLog" pointcut="execution(* com.hope.service.impl.AccountService.saveAccount())"></aop:before>-->
    <!--<aop:before method="printLog" pointcut="execution(* *.*.*.*.AccountService.saveAccount())"></aop:before>-->
    <!--<aop:before method="printLog" pointcut="execution(* *.*.*.*.AccountService.saveAccount())"></aop:before>-->
    <!--<aop:before method="printLog" pointcut="execution(* *..AccountService.saveAccount())"/>-->
    <!--<aop:before method="printLog" pointcut="execution(* *..*.*())"/>-->
    <aop:before method="printLog" pointcut="execution(* *..*.*(int))"/>
    <!--<aop:before method="printLog" pointcut="execution(* *..*.*(..))"/>-->
    </aop:aspect>
    </aop:config>
    </beans>
  • 相关阅读:
    实现类似add(1)(2)(3)的函数
    Chrome安装助手踩坑
    升级webpack4错误处理
    vue项目埋点
    如何理解vue中的v-bind?
    不能不知道的webpack基本配置
    IE9及以下浏览器升级提示
    HTML5常用API
    css中clip属性
    Web开发展望
  • 原文地址:https://www.cnblogs.com/newcityboy/p/11917961.html
Copyright © 2020-2023  润新知