Spring学习(2):SpringAOP基本概念详解

前言

AOP(Aspect Oriented Programming)意为:面向切面编程。到底什么意思呢?我们来举个例子说明。
传统的OOP(Object Oriented Programming面向对象编程)系统中,各个模块之间是相互独立的,比如说某管理系统的模块图如下:
这里写图片描述
上图对于业务需求而言,需求和具体实现之间是一一对应的,无论从开发还是维护的角度,都比较方便。

不过,在开发中为例调试,或者进入生产环境后为了对系统进行监控,我们需要为这些业务实现添加日志记录功能;或者,业务方法的执行需要一定的权限限制,那么,方法执行前肯定要执行相应的安全检查功能。虽然需求都很明确(加入日志记录,加入安全检查等等),但是,系统中的每个业务对象都要加入这些功能的话,这些功能代码就会遍及所有的业务对象。如果每个业务对象前后都要加上这些需求,那么,会造成大量的冗余代码。

对于这类散落在系统各处的需求,需要借助于AOP的开发模式,它可以将这些需求(日志记录,安全检查,事务处理等)像一把把刀“横切”到我们已经组织好的各个业务功能模块上。如下图:
这里写图片描述

上图中的“红杠杠”就是“切面(Aspect)”。Aspect之于AOP,就相当于Class之于OOP。AOP仅仅是OOP方法的一种补充,当我们把以Class形式的业务模块,和以Aspect形式的系统需求拼装到一起,整个系统就算完整啦。

正文

spring提供了一整套完整的体系来支持AOP。其核心思想就是:代理!通过代理在业务对象前后加上功能代码。

一,了解AOP术语

1.target:目标类,需要被代理的类。例如:UserService
2.Joinpoint(连接点):所谓连接点是指那些可能被拦截到的方法。例如:所有的方法
3.PointCut 切入点:已经被增强的连接点。例如:addUser()
4.advice 通知/增强,增强代码。例如:after、before
5.Weaving(织入):是指把增强advice应用到目标对象target来创建新的代理对象proxy的过程.
6.proxy 代理类
7.Aspect(切面): 是切入点pointcut和通知advice的结合。

画图更清晰:
这里写图片描述

从上图看出,一个AOP过程就是一个代理的过程嘛。

二,AOP的3种实现方式

1,jdk的动态代理。了解,不常用。
编写目标类和增强类,然后写代理类。在目标类方法前后加上增强类的方法。

2,SpringAOP。了解,不常用。
编写目标类和增强类。然后将“代理关系”配置到xml文件中。

3,AspectJ实现AOP。重点,要掌握。
AspectJ是一个java语言实现的AOP框架。其中要掌握:“AOP的5种通知类型”和“切入点表达式”。

下面是一个简单举例,其中只用到了around类型的通知:
这里写图片描述

同样的,织入的过程仍然是一个“代理”的过程。

下面,我们来写一个测试类来获取目标类的对象,并调用对象中的方法。

package com.jimmy.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.jimmy.target.Target;

public class Test1 {
    @Test
    public void test1(){
        String xmlpath = "applicationContext.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);

        Target target = (Target) applicationContext.getBean("targetId");
        target.saySomething();
    }
}

上面代码其实获取的是目标类对象的代理对象,其在目标类对象前后加了业务代码,结果如下:

before                // 前处理
target function...    // 目标函数
after                 // 后处理

总结

本文并没有关注AOP编码的细节,而是从总体上解释了AOP产生的动机和使用形式,具体使用要结合业务逻辑。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书简介<br>本书分为6大部分,其中第一部分为Spring概述性知识;第二部分讲解了Spring框架核心技术的内容;第三部分涵盖了在Spring中使用各种数据访问技术的内容;第四部分讲解业务层各种技术的知识;第五部分是展现层技术的知识;第六部分讲解了如何测试Spring应用和Spring各种工具类的知识。 全书深刻揭示了Spring的技术内幕,对IoC、AOP、事务管理等根基性的技术进行了深度的挖掘。读者阅读本书后,不但可以熟练使用Spring的各项功能,对各种Spring内部机制也将了然于胸,真正做到知其然知其所以然。此外,我们还对Spring技术所涉及到的各种Java技术、Java设计模式进行了适时的介绍,通过这些背景知识的准备,读者在理解Spring的各项原理时将不会有任何的障碍。 <br>========================================================================<br><br>第1篇 概述<br>第1章 Spring概述<br>第2章 快速入门<br>第2篇 Spring核心技术<br>第3章 IoC容器概述<br>第4章 在IoC容器中装配Bean<br>第5章 Spring容器高级主题<br>第6章 Spring AOP基础<br>第7章 基于@AspectJ和Schema的<br>第7章 AOP<br>第3篇 数据库访问<br>第8章 Spring对DAO的支持<br>第9章 Spring的事务管理<br>第10章 使用Spring JDBC访问数据库<br>第11章 使用JPA访问数据库<br>第12章 整合其他ORM框架<br>第4篇 业务层应用<br>第13章 任务调度和异步执行器<br>第14章 JavaMail发送邮件<br>第15章 在Spring中使用JMS<br>第16章 在Spring中开发Web Service<br>第17章 使用Acegi实施应用系统安全<br>第18章 动态语言支持<br>第5篇 展现层应用<br>第19章 Spring MVC之一<br>第20章 Spring MVC之二<br>第21章 集成其他Web框架<br>第6篇 其他<br>第22章 Spring应用的测试<br>第23章 Spring工具类盘点<br>附录A 各种数据库连接配置及驱动<br>附录B IDE开发环境设置 <br>=================================================<br>注意:全书章节过大,分为3部分上传。请下载其余两部分。<br>Apple祝您学习Spring愉快。<br>老规矩:有分的的给评分,每分的给顶一下。免费发放<br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值