Spring学习之旅-核心高级篇(6)

51 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情


写在前面

作为一个java程序员,spring应该都不会陌生了吧?

对于大部分程序员来说,spring的入门,估计跑起一个框架,熟悉一下开发的流程,基本上就掌握spring框架的开发了。

随着开发年限的变大,我们不能仅仅是掌握到这个地步,更应该深入的学习spring框架。

这不,接下来就是spring框架的学习之旅了,希望可以帮助到大家。

一、基于AspectJ的AOP使用

1.1 使用注解实现

1.1.1 实现步骤

  • 编写切面类(注意不是通知类,因为该类中可以指定切入点)
/**
 * @author lilinshen
 * @title 请填写标题
 * @description 请填写相关描述
 * @date 2022-11-28
 */
@Component
@Aspect //标记该类是一个切面类
public class MyAdvice {
    
    //@Before:标记该方法是一个前置通知
    //value:切入点表达式
    @Before(value = "execution(* *.*DaoImpl.*(...))")
    public void log(){
        System.out.println("记录日志...");
    }
    
}
  • 配置切面类
<context:component-scan base-package="com.llsydn.springStudy"/>
  • 开启A0P自动代理
<!--AOP基于注解的配置 - 开启自动代理 -->
<aop:aspectj-autoproxy />

1.1.2 环绕通知注解配置

@Around

作用:
    把当前方法看成是环绕通知。
value: (属性)
    用于指定切入点表达式,还可以指定切入点表达式的引用。
@Around(value = "execution(* *.*(..)")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) {
    //定义返回值
    Object rtvalue = null;
    try {
        //获取方法执行所需的参数
        Object[] args = joinPoint.getArgs();
        //前置通知:开启事务beginTransaction();
        //执行方法
        rtvalue = joinPoint.proceed(args);
        //后置通知:提交事务Comm1t();
    } catch (Throwable e) {
        //异常通知:回滚事务rollback(); e.printStackTrace();
    } finally {
        //最终通知:释放资源release();
    }
    return rtvalue;
}

1.1.3 定义通用切入点

使用@PointCut注解在切面类中定义一个通用的切入点,其他通知可以引用该切入点

/**
 * @author lilinshen
 * @title 请填写标题
 * @description 请填写相关描述
 * @date 2022-11-28
 */
@Component
@Aspect //标记该类是一个切面类
public class MyAdvice {

    //@Before:标记该方法是一个前置通知
    //value:切入点表达式
    @Before(value = "MyAdvice.fn()")
    public void log() {
        System.out.println("记录日志...");
    }

    @Pointcut(value = "execution(* *..*.*DaoImpl.*(..))")
    public void fn(){
        
    }

}

1.2 纯注解方式

/**
 * @author lilinshen
 * @title 请填写标题
 * @description 请填写相关描述
 * @date 2022-11-28
 */
@Configuration
@ComponentScan(basePackages = "com.llsydn")
@EnableAspectJAutoProxy
public class SpringConfiguration {

}

好了,以上就是Spring学习之旅-核心高级篇(6) 的全部内容了。

今天就先到这里了,后面的内容,留下次分享了,先溜了!!!^_^

如果觉得写得不错的,帮忙点赞、评论、收藏一下呗!!!

image.png