开启掘金成长之旅!这是我参与「掘金日新计划 · 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) 的全部内容了。
今天就先到这里了,后面的内容,留下次分享了,先溜了!!!^_^
如果觉得写得不错的,帮忙点赞、评论、收藏一下呗!!!