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

88 阅读2分钟

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


写在前面

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

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

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

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

一、基于AspectJ的AOP使用

其实就是指的Spring + AspectJ整合 ,不过Spring已经将AspectJ收录到自身的框架中了, 并且底层织入依然是采取的动态织入方式。

1.1 添加依赖

<!--基于AspectJ的aop依赖-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>aopalliance</groupId>
    <artifactId>aopalliance</artifactId>
    <version>1.0</version>
</dependency>

1.2 编写目标类和目标方法

  • 编写接口和实现类(目标对象)
UserService接口

UserServiceImpl实现类
  • 配置目标类, 将目标类交给spring IoC容器管理
<context:component-scan base-package="llsydn.ioc" />

1.3 使用XML实现

1.3.1 实现步骤

  • 编写通知(增强类, 一个普通的类)
/**
 * @author lilinshen
 * @title 请填写标题
 * @description 请填写相关描述
 * @date 2022-11-28
 */
public class MyAdvice {
    public void log(){
        System.out.println("记录日志...");
    }
}
  • 配置通知, 将通知类交给spring IoC容器管理
<!--配置通知、增强-->
<bean name="myAdvice" class="com.llsydn.springStudy.advice.MyAdvice"></bean>
  • 配置AOP切面
<!--配置通知、增强-->
<bean name="myAdvice" class="com.llsydn.springStudy.advice.MyAdvice"></bean>

<!--AOP配置-->
<aop:config>
    <aop:aspect ref="myAdvice">
        <!-- method: 指定要增强的方法。也就是指定通知类中的增强功能方法-->
        <!-- pointcut: 指定切入点,需要通过表达式来指定-->
        <aop:before method="log"
            pointcut="execution(void com.llsydn.springStudy.dao.UserDaoImpl.insert())" />
    </aop:aspect>
</aop:config>

1.3.2 切入点表达式

  • 切入点表达式的格式:
execution([修饰符] 返回值类型 包名.类名.方法名(参数))
  • 表达式格式说明:
    • execution: 必须要
    • 修饰符: 可省略
    • 返回值类型: 必须要,但是可以使用 * 通配符
    • 包名:
    ** 多级包之间使用 . 分割
    ** 包名可以使用*代替,多级包名可以使用多个 * 代替
    ** 如果想省略中间的包名可以使用 ..
    
    • 类名:
    ** 可以使用 * 代替
    ** 会也可以写成 *DaoImpl
    
    • 方法名:
    ** 也可以使用 * 代替
    ** 也可以写成 add*
    
    • 参数:
    ** 参数使用 * 代替
    ** 如果有多个参数,可以使用 .. 代替
    

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

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

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

image.png