java架构解密——Spring框架的AOP

一直以来,我们应用了不少的AOP框架,但是对于AOP的底层实现却没有过多的深入,古话就是“知其然,不知其所以然”,随着AOP学术讨论的骤然兴起,我也开拓了自己的眼界,深入了解了AOP这个五彩斑斓的世界!

先来看看大众的定义:

百度百科:

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

维基百科:

面向侧面的程序设计(aspect-oriented programming,AOP,又译作面向方面的程序设计、观点导向编程、剖面导向程序设计)是计算机科学中的一个术语,指一种程序设计范型。该范型以一种称为侧面(aspect,又译作方面)的语言构造为基础,侧面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。

侧面的概念源于对面向对象的程序设计的改进,但并不只限于此,它还可以用来改进传统的函数。与侧面相关的编程概念还包括元对象协议、主题(subject)、混入(mixin)和委托。

看了这些范范的定义,我也很晕,但是,我们可以从最简单的问题深入,这个简单的问题就是“我们为什么编程?”

我对这个问题的解答就是,为了不编程!我们创造函数,创造类,创造框架,创造软件,创造IDE是为了什么?是为了一步一步消灭人类的重复劳动!是为了解放人,让人发挥人最大的特质,就是思考和总结!

顺着这个思路,我们来还原AOP最初的样子:

1,抛弃复制!

在最初的程序设计中,我们需要为我们编写的每个类加上日志,事务控制!我们的程序猿老老实实写了N多的日志处理和事务处理!当有一天,有个程序猿突然说,我烦了这么繁重的工作,我一定要将代码中重复的部分拿到公共类中处理!

示意图:

2,依赖反转

经过一段时间后,某猿又不满意了,因为我还是要针对每个类调用公共类,他就翻看了设计模式,发现,代理是不错的解决方案,如果使用动态代理,就更有意思了

示意图:

两种动态代理示意图

3,AOP

又过了一段时间,程序员将动态代理与IOC结合,写出了一个框架,叫AOP框架,从此免费提供给所有需要这个业务的人,java又多了一个概念,就是AOP

概念示意图:

总结:

在计算机诞生之初,就是为了替人做一些重复性的简单的工作,随着计算机技术的深入,我们的这个初衷,一直没有变过,计算机最大的优点就是重复,作为程序设计者,在所有员工的工作中,我们是否都应该考虑,这个工作是必须的吗?这个工作是纯洁的copy吗?这个工作可以交给计算机来做吗?这个工作是不是一个人做了,大家都可以使用呢?这些工作,不仅仅需要设计师脑海中的经验,还有对于业务的抽象能力以及整体架构的把控力!

作为21世纪的程序设计者,你还在让员工做无谓的copy吗?

时间: 2024-10-13 11:20:28

java架构解密——Spring框架的AOP的相关文章

java架构解密——Spring框架的ioc自我实现

在java的开发中,经常使用的框架当属SSH,而在这张框架中,我们首先接触到的就是神奇的Spring,虽然有N多前辈说Spring就是N多公共代码的集合,是帮助我们实现了,我们很久之前就想实现或者已经实现的好的点子的集合,但是作为一名合格工程师,怎么能不懂spring的底层实现呢!在今天咱们就一起探索Spring是怎么完成IOC工作的,也自己做一个简单Spring框架! 1,Spring中Bean的定义 作用:在spring中使用的bean,都有某些公共属性,此类就是对公共属性的定义 <span

java架构解密——双容器优化aop

上篇博客中,提出,优化是个无止境的过程,的确,随着需求的变化,软硬件基础的升级,我们越来越不考虑代码的容量,而是考虑代码的质量,但是随着研究的深入,到了某个阶段,我们也要考虑代码的容量问题,这时,容器的概念,脱颖而出,在上篇博客将服务类作为一个接口传入,实际在后台是一个map容器,我们不仅包含了map的全部实现,还实现了服务类的叠加,但是美中不足的是,我们的业务类,还是单个的对象,就如下图: 类图改造 这时,我们如果想为更多的业务提供服务,就必须编写更多的aop,这不符合我们的原则,基于这一点,

java架构解密——用接口改造AOP

优化是个无止境的工作,在AOP的路上,我们走得很远,但是还有很多的工作,我们没有做,比如,将aop的业务部分封装成容器,将aop的服务部分改造成面向接口的,这样就不受具体的形式上的限制了!这样AOP的优化,就又前进了一步,也是符合咱们的面向接口编程的思想,下面就和我一起研究下如何将接口的思想融入到aop的实现中. 回顾: 在上篇博客中,我们将aop的服务封装到了容器中: 这样的好处就是我们可以使用配置文件扩展服务类,服务类不再受限于具体的形式与方法,而我们封装的服务类和动态代理,构成了这样的一个

java架构解密——AOP之动态代理实现

在上篇博客中,我们在宏观上介绍了AOP的底层实现,具体见博客java架构解密--Spring框架的AOP,在博客中,我们讲述了Aop的一些设计上的思路,今天,咱们就具体的实现,和大家一起探讨,看看AOP是怎么一步一步走到今天,而且有些图,也要做些纠正! 一,代码演变 前提:最初要实现的功能(打招呼) 代码: 接口: <span style="font-size:18px;">public interface Greeting { void sayHello(String n

好程序员Java干货分享Spring框架之IOC原理

好程序员Java干货分享Spring框架之IOC原理,前言:Spring框架是我们进行企业级开发的最常用框架,本章我们将了解Spring框架,并学习Spring的IOC特性以及IOC的实现原理:注解和反射. Spring框架简介 Spring是一种轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架,能够为企业级开发提供一站式服务. Spring的优点有 1.方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度

【Java】关于Spring框架的总结 (一)

本文总结一些关于Spring框架的理解,注意点及基础操作.如果有不对的地方,欢迎批评和建议.大家一起努力吧! Spring 框架简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.Spring 致力于 Java EE 应用的各种解决方案,而不是仅仅专注于某一层的方案,可以说, Spring 是企业应用开发的"一站式"选择,Spring 贯穿表现层.

Java学习笔记:Spring框架

1.什么是Spring? 1.1 spring 是一个开源框架 1.2 spirng 为简化企业级应用开发而生,使用 spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能 1.3 spring 是一个 IOC(DI) 和 AOP 容器框架 2.Spring入门示例   2.1 HelloWorld.java package com.oneline.spring.day01; public class HelloWorld { private String name;

Spring框架及AOP

Spring核心概念 Spring框架大约由20个功能模块组成,这些模块主分为六个部分: Core Container :基础部分,提供了IoC特性. Data Access/Integration Web AOP(Aspect Orient Programming) Instrumentation Test Spring两大核心技术 控制反转(Inversion of Control IoC) 称之为”依赖注入”,是面向对象编程中的一个设计理念,用来降低程序代码之间的耦合度. 将组建对象的控制

Spring框架之-AOP

在工作以及面试当中Spring是必不可少的,当然了简单的认知是spring的两大特性: IOC控制翻转(也是依赖注入).AOP(面向切面) 首先什么叫aop,aop到底能做什么?大致意思是这样的 AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理.日志管理.权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性. 例如我刚才所做的日志切面,记录每次的请求和响应消息入库 我并没有像某些人把插入库的方法写在每个请求的方法里,就像上