Java教程

【万字长文】Spring AOP 层层递进轻松入门 !

本文主要是介绍【万字长文】Spring AOP 层层递进轻松入门 !,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

初识 AOP(传统程序)

Tips:如果想要快速查阅的朋友,可以直接跳转到 初识AOP(Spring 程序)这一大节

前面的内容以联系过去 Java、JavaWeb 的知识逐步引入到 AOP 为主 真正的Spring AOP内容包括下面几个板块 可以跳转一下哈

(一) AOP 术语

(二) AOP 入门案例:XML 、注解方式

(三) 完全基于 Spring 的事务控制:XML、注解方式、纯注解方式

(一) AOP的简单分析介绍

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

—— 百度百科

开篇就直接来看 Spring AOP 中的百科说明,我个人认为是非常晦涩的,当回过来头再看这段引言的时候,才恍然大悟,这段话的意思呢,说白了,就是说我们把程序中一些重复的代码拿出来,在需要它执行的时候,可以通过预编译或者运行期的动态代理实现不动源码而动态的给程序进行增强或者添加功能的技术

拿出一些重复的代码? 拿出的究竟是什么代码呢?举个例子!

在下面的方法中,我们模拟的是程序中对事务的管理,下面代码中的 A B都可以看做 “开启事务”、“提交事务” 的一些事务场景,这些代码就可以看做是上面所说的重复的代码的一种

而还有一些重复代码大多是关于权限管理或者说日志登录等一些虽然影响了我们 代码业务逻辑的 “干净”,但是却不得不存在,如果有什么办法能够抽取出这些方法,使得我们的业务代码更加简洁,自然我们可以更专注与我们的业务,利于开发,这也就是我们今天想要说重点

最后不得不提的是,AOP 作为 Spring 这个框架的核心内容之一,很显然应用了大量的设计模式,设计模式,归根结底,就是为了解耦,以及提高灵活性可扩展性,而我们所学的一些框架,直接把这些东西封装好,让你直接用,说的白一点,就是为了让你偷懒,让你既保持了良好的代码结构,又不需要和你去自己编写这些复杂的数据结构,提高了开发效率

一上来就直接谈 AOP术语阿,面向切面等等,很显然不是很合适,光听名字总是能能让人 “望文生怯” , 任何技术的名字只不过是一个名词罢了,实际上对于入门来说,我们更需要搞懂的是,通过传统的程序与使用 Spring AOP 相关技术的程序进行比较,使用 AOP 可以帮助我们解决哪些问题或者需求,通过知其然,然后应用其所以然,这样相比较于,直接学习其基本使用方式,会有灵魂的多!

(二) 演示案例(传统方式)

说明:下面的第一部分的例子是在上一篇文章的程序加以改进,为了照顾到所有的朋友,我把从依赖到类的编写都会提到,方便大家有需要来练习,看一下程序的整体结构,对后面的说明也有一定的帮助

(1) 添加必要的依赖

  • spring-context
  • mysql-connector-java
  • c3p0(数据库连接池)
  • commons-dbutils(简化JDBC的工具)—后面会简单介绍一下
  • junit (单元自测)
  • spring-test

说明:由于我这里创建的是一个Maven项目,所以在这里修改 pom.xml 添加一些必要的依赖坐标就可以

如果创建时没有使用依赖的朋友,去下载我们所需要的 jar 包导入就可以了

<packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>

        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
    <
                    
这篇关于【万字长文】Spring AOP 层层递进轻松入门 !的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!