首页 > 代码库 > Spring:面向切片编程
Spring:面向切片编程
在之前我们记录Spring的随笔当中,都是记录的Spring如何对对象进行注入,如何对对象的属性值进行注入,即我们讲解的很大部分都是Spring的其中一个核心概念——依赖注入(或者说是控制翻转,IOC)的方面,那么通过前几天所学的《常用设计模式:代理模式》的学习之后,我们今天来学习一下与代理模式密切相关,或者说是代理模式的一个强大应用的Spring的另一个核心概念——面向切片编程,即AOP(Aspect OrientedProgramming)
首先我们都知道java是一门经典的面向对象的编程语言(OOP,Object OrientedProgramming)面向对象的编程语言有三大特性,封装,继承,和多态,其中的继承允许我们定义从上到下的关系,即子类可以继承父类的一些功能函数,也可以改写父类的一些功能函数,但是要为分散的对象(即不是同一父类的对象,这里的父类不包括Object)引入一个公共的行为的时候,OOP就显得很乏力,它需要在每一个对象里头都添加这个公用的行为,这样代码的就显得很重复,很冗余,最典型的就是添加日志功能,这个日志功能和对象的核心功能毫无关系,但是要为分散的对象添加日志功能,就必须向打开每一个分散的封装好的对象,然后添加日志功能代码,我们将这种散步在各处与对象核心功能无关的代码,称之为横切代码。为了解决这个问题,AOP就应运而生。
AOP是将多个类的公共行为封装到一个可重用的模块(如我们上一段所说的日志功能)并将其命名为“Aspect”,即是说将那些和类的核心业务无关的,却为业务模块所公共调用的逻辑处理封装起来,便可以减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP弥补了OOP在横向关系上操作的不足。而实现AOP的技术的主要两种方式,其中一种就是我们《常用设计模式:代理模式》所提到的动态代理技术;还有一种方式就是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
而Spring当中的AOP的实现原理就是我们之前所提到的动态代理技术(如有对原理不是很理解的,可以翻看《常用设计模式:代理模式》)。那么接下来我们要看看如何去使用Spring当中的面向切片编程去实现一些功能,首先我们先来看看在Spring的面向切片编程当中的一些常设计的概念:
Spring:面向切片编程