Spring-AOP简介、核心概念、入门案例及工作流程

简介: Spring-AOP简介、核心概念、入门案例及工作流程

一、AOP简介及核心概念

AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构,跟OOP(Object Oriented Programming)面向对象编程也是一样,也是一种编程思想。


作用:在不惊动原始设计的基础上为其进行功能增强


Spring理念:无入侵式/无侵入式

490b013e5e164cbd9661ac05b8d99fec.png

● 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法,抛出异常,设置变量等


       ■ 在SpringAOP,理解为方法的执行


● 切入点(Pointcut):匹配连接点的式子


       ■ 在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法


               ◆ 一个具体方法,com.itheima.dao包下的BookDao接口中的无形参无返回值的save方法


               ◆ 匹配多个方法:所有的save方法,所有的get开头的方法,所有以Dao结尾的接口中的任意方法,所有带有一个参数的方法


● 通知(Advice):在切入点处执行的操作,也就是共性功能


       ■ 在SpringAOP中,功能最终以方法的形式呈现


● 通知类:定义通知的类


● 切面(Aspect):描述通知与切入点的对应关系

二、AOP入门案例(注解版)

案例设定:测定接口执行效率


简化设定:在接口执行前输出当前系统时间


开发模式:XML or 注解


思路分析:

1、导入坐标(pom.xml)

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.4</version>
    </dependency>

说明:spring-context坐标默认依赖spring-aop坐标

0fbbb59d1cfa41f39dfa3684152e7d4b.png

2、定义dao接口与实现类

public interface BookDao {
    public void save();
    public void update();
}
@Repository
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println(System.currentTimeMillis());
        System.out.println("book dao save ...");
    }
    public void update(){
        System.out.println("book dao update ...");
    }
}

3、定义通知类、制作通知

public class MyAdvice {
    public void before(){
        System.out.println(System.currentTimeMillis());
    }
}

4、定义切入点

public class MyAdvice {
    //设置切入点,要求配置在方法上方
    @Pointcut("execution(void com.itheima.dao.BookDao.update())")
    private void pt(){}
}

说明:切入点定义依托一个不具有实际意义的方法进行,即无参数,无返回值,方法体无实际逻辑

5、绑定切入点与通知关系,并指定通知添加到原始连接点的具体执行位置

public class MyAdvice {
    //设置切入点,要求配置在方法上方
    @Pointcut("execution(void com.itheima.dao.BookDao.update())")
    private void pt(){}
    //设置在切入点pt()的前面运行当前操作(前置通知)
    @Before("pt()")
    public void before(){
        System.out.println(System.currentTimeMillis());
    }
}

6、定义通知类受Spring容器管理,并定义当前类为切面类

//通知类必须配置成Spring管理的bean
@Component
//设置当前类为切面类类
@Aspect
public class MyAdvice {
    //设置切入点,要求配置在方法上方
    @Pointcut("execution(void com.itheima.dao.BookDao.update())")
    private void pt(){}
    //设置在切入点pt()的前面运行当前操作(前置通知)
    // @Before("pt()")
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

7、开启Spring对AOP注解驱动支持

@Configuration
@ComponentScan("com.itheima")
//开启注解开发AOP功能
@EnableAspectJAutoProxy
public class SpringConfig {
}

自此入门案例结束。

三、AOP工作流程

1、Spring容器启动


2、读取所有切面配置中的切入点

@Component
@Aspect
public class MyAdvice {
    @Pointcut("execution(void com.itheima.dao.BookDao.save())")
    private void ptx(){}
    @Pointcut("execution(void com.itheima.dao.BookDao.update())")
    private void pt(){}
    @Before("pt()")
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

3、初始化bean,判定bean对应的类中的方法是否匹配到任意切入点


● 匹配失败,创建对象


● 匹配成功,创建原始对象(目标对象)的代理对象


4、获取bean执行方法


● 获取bean,调用方法并执行,完成操作


● 获取的bean是代理对象时,根据代理对象的运行模式运行原始方法与增强的内容,完成操作


直接打印对象看不出不一样,需要使用getClass打印,根据类型才能区分。


AOP核心概念:


目标对象(Target):原始功能去掉共性功能对应的类产生的对象,这种对象时无法直接完成最终工作的


代理(Proxy):目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现

目录
相关文章
|
6天前
|
IDE Java 应用服务中间件
spring boot 启动流程
Spring Boot 启动流程简介: 在使用 Spring Boot 之前,启动 Java Web 应用需要配置 Web 容器(如 Tomcat),并将应用打包放入容器目录。而使用 Spring Boot,只需运行 main() 方法即可启动 Web 应用。Spring Boot 的核心启动方法是 SpringApplication.run(),它负责初始化和启动应用上下文。 主要步骤包括: 1. **应用启动计时**:使用 StopWatch 记录启动时间。 2. **打印 Banner**:显示 Spring Boot 的 LOGO。 3. **创建上下文实例**:通过反射创建
|
20天前
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
67 18
|
2月前
|
存储 安全 Java
Spring Security 入门
Spring Security 是 Spring 框架中的安全模块,提供强大的认证和授权功能,支持防止常见攻击(如 CSRF 和会话固定攻击)。它通过过滤器链拦截请求,核心概念包括认证、授权和自定义过滤器。配置方面,涉及密码加密、用户信息服务、认证提供者及过滤器链设置。示例代码展示了如何配置登录、注销、CSRF防护等。常见问题包括循环重定向、静态资源被拦截和登录失败未返回错误信息,解决方法需确保路径正确和添加错误提示逻辑。
Spring Security 入门
|
1月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
347 7
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
97 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
Java 数据库连接 数据库
从入门到精通---深入剖析Spring DAO
在Java企业级开发中,Spring框架以其强大的功能和灵活性,成为众多开发者的首选。Spring DAO(Data Access Object)作为Spring框架中处理数据访问的重要模块,对JDBC进行了抽象封装,极大地简化了数据访问异常的处理,并能统一管理JDBC事务。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring DAO,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
34 1
|
3月前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
84 5
|
存储 缓存 Java
Spring 缓存抽象简介|学习笔记
快速学习 Spring 缓存抽象简介
114 0
|
XML 开发框架 监控
Spring Boot 简介|学习笔记
快速学习 Spring Boot简介
|
前端开发 Java 程序员
01_spring_ 简介| 学习笔记
快速学习 01_spring_ 简介
120 0