栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring学习笔记-AOP(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring学习笔记-AOP(一)

AOP简介 什么是OOP?

我们之前开发是使用三层架构的方式,每做一个模块都要开发他的表现层、业务层、数据层。

即OOP模式,我们关心的是一一个模块中的功能。

所以在开发中,就会有较多相似的代码。

什么是AOP?

例如下述代码,我们可以从中抽取出共性的代码,使用AOP,在运行的时候,再将该环境还给对象。

AOP(Aspect Oriented Programing)面向切面编程,一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构

AOP弥补了OOP的不足,基于OOP基础之上进行横向开发

OOP规定程序开发以类为主体模型,一切围绕对象进行,完成某个任务先构建模型

AOP程序开发主要关注基于OOP开发中的共性功能,一切围绕共性功能进行,完成某个任务先构建可能遇到的所有共性功能(当所有功能都开发出来也就没有共性与非共性之分)

AOP的作用

伴随着AOP时代的降临,可以从各个行业的标准化、规范化开始入手,一步一步将所有共性功能逐一开发完毕,最终以功能组合来完成个别业务模块乃至整体业务系统的开发

目标:将软件开发由手工制作走向半自动化/全自动化阶段,实现“插拔式组件体系结构”搭建

AOP优势

提高代码的可重用性

业务代码编码更简洁

业务代码维护更高效

业务功能扩展更便捷

AOP入门案例 AOP相关概念 (1)连接点 

不管是接口中的方法,还是实现类中的方法,只要是一个方法叫做连接点

(2)切入点

在后期会被抽取出共性功能的方法,叫做切入点。

切入点和连接点都是方法;但是连接点是指所有方法,而切入点只是指被抽取出共性功能的方法。

(3)通知

被挖掉的共性功能叫做通知,最终以一个方法的形式呈现。

(4)切面

切入点与通知间的关系叫做切面,即:共性功能与挖的位置的对应关系

(5)目标对象 

挖掉功能的方法对应的类产生的对象,这种对象是无法直接完成最终工作的。

(6)织入

目标对象是不能直接运行的,我们只有将其原始功能“放回去”才可以运行。这个放回去的过程叫做织入。

(7)代理

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

小结 

Joinpoint(连接点):就是方法

Pointcut(切入点):就是挖掉共性功能的方法

Advice(通知):就是共性功能,最终以一个方法的形式呈现

Aspect(切面):就是共性功能与挖的位置的对应关系

Target(目标对象):就是挖掉功能的方法对应的类产生的对象,这种对象是无法直接完成最终工作的

Weaving(织入):就是将挖掉的功能回填的动态过程

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

Introduction(引入/引介) :就是对原始对象无中生有的添加成员变量或成员方法

AOP开发过程

开发阶段(开发者完成)

正常的制作程序

将非共性功能开发到对应的目标对象类中,并制作成切入点方法

将共性功能独立开发出来,制作成通知

在配置文件中,声明切入点

在配置文件中,声明切入点与通知间的关系(含通知类型),即切面

简单来说就是——做通知、做切入点、做切面!

运行阶段(AOP完成)

Spring容器加载配置文件,监控所有配置的切入点方法的执行

当监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置将通知对应的功能织入,完成完整的代码逻辑并运行

AOP入门案例 项目骨架

详细代码 

UserServiceImpl实现类

public class UserServiceImpl implements UserService {

    public void save() {
        //被AOP抽取
        //System.out.println("共性功能");
        System.out.println("User Service running...");
    }
}

AOPAdvice 

//1.制作通知类,在一个类中定义一个方法用来完成共性功能
public class AOPAdvice {
    public void function() {
        System.out.println("共性功能");
    }
}

applicationContext.xml



    
    

    
    

    
    
        
        
        
        
            
            
        
    

UserApp程序运行入口

public class UserApp {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) ctx.getBean("userService");
        userService.save();
    }
}
代码分析 

我们重点关注XML文件中的内容即可。

在AOP中,需要我们手写的只有配置切入点、配置通知、配置它们之间的关系切面。(3个东西)

:表示aop的配置,是一对标签,里面写配置内容。

:配置切入点,里面有两个属性 id和execution(表达式)        

:配置切面,也是一对标签,里面有属性ref 表示哪一个通知对应的类。

:从原来的方法中的哪一个位置“挖来的”。before表示前面挖来的。

这只是大致描述,详细的请看下文!

AOP配置(XML) AspectJ

Aspect(切面)用于描述切入点与通知间的关系,是AOP编程中的一个概念

AspectJ是基于java语言对Aspect的实现

AOP配置 (1)aop:config

(2)aop:aspect

(3)aop:pointcut

切入点

切入点表达式的组成

切入点的三种配置方式

通知类型

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号