跟着柴毛毛学Spring(4)——面向切面编程![这里写图片描述](http://img.blog.csdn.net/20171031111402095)

这里写图片描述

面向切面编程简介

1. 什么是面向切面编程?

  面向切面编程是Spring的第二大特性,它能将一个函数中非主体但有很必要的代码封装到一个单独的类中,在程序运行的时候再把它们插入到函数中。这样能使程序猿只关注函数的主体功能,而且写出来的代码具有具有较强的可读性,简约明了。

2. 面向切面编程的优点

面向切面编程的优点有两个:
1. 一个函数中所有额外的功能都被封装在一个类中,而不是分散在函数的各处。
2. 由于将非主体功能的代码转移到其他类中,因此函数的代码将更佳简洁。

3. Spring的面向切面编程特点

目前面向切面(AOP)市场的三足鼎立格局是这样的:
- AspectJ
- JBoss Aspect
- Spring Aspect
Spring Aspect借鉴AspectJ。

  所谓面向切面,前面已经介绍过,就是将函数的一部分代码抽取出来,封装到一个类中,然后在某一时刻将其插入到程序中去。
AOP世界中,将切面插入的到程序中的时机有以下三种:
1. 编译时插入
2. 类被加载的时候插入
3. 程序运行时被插入

  Spring是在程序运行期间将切面插入到相关函数中去的。
  此外,在编译时插入需要特殊的编译器,在类加载的时候插入需要特殊的类加载器,而在运行时插入不需要额外的软件支持。

开始使用

  假设现在有一个函数,用来查询数据库中名字为name的Person对象:

    public String queryPersons(String name){
        //查询的具体操作……
        //此处省略100行代码……
    }

  我们需要在查询开始前判断name是否为空,在查询结束后记录操作日志,在查询发生异常时记录异常日志。
在过去,我们把这些代码都直接写在这个函数中,这样会导致这个函数很长,可读性很差。下面我们使用面向切面编程的思想解决这个问题。

1. 定义切面代码

  首先需要将这个函数中额外的功能封装到一个类中,这个类就是一个普通类,功能封装在函数中:

class PersonAspect(){
    /**
      * 判断参数是否为空
      */
    public void verifyNull(String name){
        //判断参数是否为空
    }

    /**
      * 记录操作日志
      */
    public void logInfo(){

    }

    /**
      * 记录异常日志
      */
    public 
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值