切入点表达式回顾

切入点表达式:

完整写法:execution(方法的修饰符 方法的返回值 类的全类名.方法名(参数))
    支持通配符的写法:
    *   : 标识任意字符串
    ..  : 任意重复次数
    1. 方法的修饰符可以省略:
    2. 返回值可以使用*号代替:标识任意返回值类型
    3. 包名可以使用*号代替,代表任意包(一层包使用一个*)
    4. 使用..配置包名,标识此包以及此包下的所有子包
    5. 类名可以使用*号代替,标识任意类
    6. 方法名可以使用*号代替,表示任意方法
    7. 可以使用..配置参数,任意参数

切入点表达式代码
导入第三方jar包
	<!-- 切入点表达式 -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.8</version>
    </dependency>
切入点表达式:
    作用: 找到需要增强的方法
    格式: 修饰符 返回值 包名.类名.方法名称(参数列表)
        public void com.village.service.impl.AccountServiceImpl.save())
    规则:
        *   : 标识任意字符串
        ..  : 任意重复次数
            public void com.village.service.impl.AccountServiceImpl.save(..)
        1. 方法的修饰符可以省略:
            void com.village.service.impl.AccountServiceImpl.save(..)
        2. 返回值可以使用*号代替:标识任意返回值类型
            * com.village.service.impl.AccountServiceImpl.save(..)
        3. 包名可以使用*号代替,代表任意包(一层包使用一个*)
            * com.village.*.*.AccountServiceImpl.save(..)
        4. 使用..配置包名,标识此包以及此包下的所有子包
            * com..AccountServiceImpl.save(..)  不建议
        5. 类名可以使用*号代替,标识任意类
            * com.village.*.*.*.save(..)
        6. 方法名可以使用*号代替,表示任意方法
            * com.village.*.*.*.*(..)
            * *.*.*.*.*(..)   不要
        7. 可以使用..配置参数,任意参数

        最终建议格式:
            * com.village.service.*.AccountServiceImpl.*(..)

 切面类代码

/**
 * 此类为通知类:
 *      在该类中定义了,各种通知需要调用的相关方法
 */
@Component("myAspect")
@Aspect // 声明此类为切面类(通知类)
public class MyAspect {
    /**
     * 定义一个无参无返回值的方法
     * 在方法上添加@Pointcut注解,用于定义切入点表达式
     * 引用时,只需要使用当前方法的名称()   pt()
     */
    @Pointcut("execution(* com.village.service.impl.*.*(..))")
    public void pt(){}
    /**
     * 前置通知调用的方法
     */
    //@Before("pt()")
    public void before(){
        System.out.println("前置通知...111111111111");
    }

    /**
     * 后置通知调用的方法
     */
    //@AfterReturning("pt()")
    public void afterReturning(){
        System.out.println("后置通知...2222222222222");
    }

    /**
     * 异常通知调用的方法
     */
    //@AfterThrowing("pt()")
    public void afterThrowing(){
        System.out.println("异常通知...33333333333333");
    }

    /**
     * 最终通知调用的方法
     */
    //@After("pt()")
    public void after(){
        System.out.println("最终通知...44444444444444");
    }

    /**
     * 环绕通知调用的方法
     */
    @Around("pt()")
    public Object around(ProceedingJoinPoint joinPoint){
        Object result = null;
        try {
            System.out.println("前置通知...");
            // 相当于 方法字节码对象.invoke();
            // 让原方法执行
            result = joinPoint.proceed();
            System.out.println("后置通知...");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            System.out.println("异常通知...");
        }finally {
            System.out.println("最终通知...44444444444444");
        }
        return result;
    }
}

 

推荐这些文章:

java System类回顾

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。System类私有修饰构造方法,不能创建对象,直接类名调用。
 
练习
在控制体输出1-10000,计算这段代码执行了多少毫秒

package com;

public class SystemDemo {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());
long start = System.currentTimeM...

13.回顾递归调用机制

1.打印问题
public static void test(int n) {
if (n > 2) {
test(n - 1);
} //else {
System.out.println("n=" + n);
// }
}
2.阶乘问题
public static int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n; // 1 * 2 * 3
}
}

...

Day02-SpringAOP&&事务

typora-copy-images-to: assets

# Spring回顾1. Spring的IOC机制 0). 思想 : 控制反转 1). xml配置 2). 注解配置2. Spring整合其他框架 1). 整合mybatis 2). 整合junit # Spring第三天 : AOP (面向切面编程)1. AOP底层原理 : 动态代理 0). 方法增强: 在不惊动原始设计的基础上(不修改源代码),为其添加功能 无侵入性 1). JDK Proxy : 基于接口 2). CGLIB : 基于类2. AOP (重点)...

java基础总结——java面向对象——static——final——this

 
 
 
 
 
 
 
 
 
 

public class Helllo2
{

final int a;

public Helllo2(int a)
{
this.a = a;
}

final int b = 12;

public void daying()
{
System.out.println("++++++++");
}

public void daying2(...

方法的定义、方法的调用及方法的重载

方法的定义:

方法之中void表示不需要返回值,其他都要返回值(return)
创建方法的格式:
修饰符+(static)+返回值类型+方法名()

 
 
方法的调用:

方法的重载:

 

...

Lambda表达式练习(抽象方法带无参返回值)

package com.czie.iot1913.Java8.Lambda.LambdaTest01.Practice02;/** * FileName: FlyableDemo * Author: lps * Date: 2022/4/3 16:09 * Sign:刘品水 Q:1944900433 */public class FlyableDemo { public static void main(String[] args) { //匿名内部类 useFlyable(new Flyable() { @Override...

JS运算符练习

运算符练习:
 
class Demo{
public static void main (String[ ]  args){
    ++:自然增 +1
   i++:先将 i 的值赋值给 i++ 这个整数,然后 i 再自增 +1
   ++i:先将 i 的值自增 +1 ,然后再将 i 的值赋给 ++i 这个整体
    --:自减 -1
    i--:先将 i 的值赋给 i-- 这个整体,然后 i 再自减 -1
    --i:先将 i 的值自减 ...

单例模式 枚举方式

enum Singleton {
INSTANCE;

public void m() {
System.out.println("test");
}
}

 

...

文章标题:切入点表达式回顾
文章链接:https://www.dianjilingqu.com/51004.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>