spring 学习之二 AOP编程

AOP概念

  AOP, aspect oriented programing,翻译过来就是面向切面编程的意思,那什么叫面向切面编程呢?相对于之前传统的纵向继承方式来对原有功能进行功能扩展,

面向切面编程的好处就是不需要增加源代码就可以进行功能扩展。

AOP术语

  --joinpint(连接点): 指那些被拦截到的点,在spring中,这些点指的是方法

  --pointcut(切入点) : 指要对哪些连接点进行拦截定义,即对哪些方法做扩展处理

  --advice(通知/增强) : 通知是指拦截到joinpoint之后所要做的事情,即扩展的功能本身。而通知根据其出现在相对于切入点(被扩展功能的方法)的位置,而被分为

    前置通知,后置通知,异常通知,最终通知,环绕通知

  --aspect(切面) : 切入点与通知的结合

一个例子

  从上面的术语和描述可能还不太理解AOP真正的作用,举一个直白的例子吧,先写一个Dao方法

public class UserDao {
    //add方法就是切入点
    public void add(User user){
        System.out.print("在这里添加一个用户");
    }
}

在发布第二版的时候,增加了一个功能,就是在添加用户的时候,打印出添加的用户信息,那该怎么实现呢?看下面代码

public class UserDao {
    //add方法就是切入点
    public void add(User user){
        System.out.print("新增的用户是 " + user.name);  //新扩展的功能
        System.out.print("在这里添加一个用户");
    }
}

很显然 这样的做法不是很好,耦合太强,现在我们看看AOP是怎么做到这一点的呢?在AOP时,userDao中的add()方法是我们需要加强功能的方法,也就是术语中的切入点。再

看AOP中的增强代码(扩展的那部分功能)

public class UserService {
    //增强,扩展的功能
    public void extendm(User user){
        System.out.print("新增的用户是 " + user.name);  //新扩展的功能
    }
}

配置文件写法

<bean id="userDao" class="com.blueto.aop.UserDao"></bean>
<bean id="userDaoService" class="com.blueto.aop.UserDaoService"></bean>

//aop配置
<aop:config>
    //切入点,被扩展的方法
    <aop:pointcut expression="execution(* com.blueto.aop.UserService.*(..))" id="pointcut1"/>
    //切面
    <aop:aspect ref="userDaoService">
            //扩展的方法
           <aop:before method="extendm" pointcut-ref="pointcut1"/>
    </aop:aspect>
</aop:config>

  上面配置文件中的切入点的表达式的语法为:

    execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)

  表示对哪些方法进入功能扩展,即AOP中的增强,写法有下面几种,只要理解了意思就好记了

  1)execution(* com.blueto.aop.UserService.add(..))    对add方法增强

  2)execution(* com.blueto.aop.UserService.*(..))    对UserService类中所有方法增强

  3)execution(* *.*(..))    对所有包下面所有类的所有方法增强

  配置文件中的aop:before对应的是前置增强,其他的增强方式有环绕增强(after-returning),后置增强(around)等

  到此,通过例子说明,AOP的配置文件方式就完成了,整个过程还是显得有点复杂,不过和Ioc一样,这种技术还有一种简单的实现方式,那就是注解式

注解方式实现AOP

  第一步 配置文件中创建类

<bean id="userDao" class="com.blueto.aop.UserDao"></bean>
<bean id="userDaoService" class="com.blueto.aop.UserDaoService"></bean>

//开启aop操作
<aop:aspect-autoproxy></aop:aspect-autoproxy>
  

  第二步,在增强类(扩展功能方法)上面添加注解

@Aspect
public class UserService {
     @Before(value="execution(* com.blueto.aop.UserDao.*(..))")
    public void extendm(User user){
        System.out.print("新增的用户是 " + user.name);  //新扩展的功能
    }
}
时间: 2024-12-25 06:40:20

spring 学习之二 AOP编程的相关文章

Spring学习(二)——使用用Gradle构建一个简单的Spring MVC Web应用程序

1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module,在弹出的窗口的左侧中选择 [Gradle],右侧勾选[Spring MVC],如下图所示: 并勾选[Application server],下方选择框中选择Tomcat7.0,如无该选项,则选中右边的 [ New... ] -- [ Tomcat Server ], 配置 Tomcat .配置好后

Spring学习(二)

1. AOP的思想(如何实现),AOP在哪些地方使用? 相关术语有哪些? AOP是面向切面编程,它是一种编程思想,采取横向抽取机制,取代了传统纵向继承体系重复性代码的方式 应用场景有: 记录日志 监控方法运行时间(监控性能) 权限控制 缓存优化(第一次调用查询数据库,将查询结果放入内存对象:第二次调用,直接从内存对象返回,不需要查询数据库) 事务管理(调用方法前开启事务,调用方法后提交或者回滚.关闭事务) AOP的相关术语 Aspect(切面): 是通知和切入点的结合,通知和切入点共同定义了关于

Spring学习篇:AOP知识整理

AOP知识整理 AOP(Aspect-Oriented Programming):面向切面的编程.OOP(Object-Oriented Programming)面向对象的编程.对于OOP我们已经再熟悉不过了,对于AOP,可能我们会觉得是一种新特性,其实AOP是对OOP的一种补充,OOP面向的是纵向编程,继承.封装.多态是其三大特性,而AOP是面向横向的编程. 面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元是类(classe

Spring学习六、AOP与整合Mybatis

十一.AOP AOP(Aspect Oriented Programming) 意为:面向切面编程 是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的一种延续,是软件开发的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型. 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分之间的耦合度降低,提高程序的可重用性,同时提高开发效率. AOP的作用及优势 作用 程序运行期间,不修改源码对已有方法进行增强 优势 减少重复代码

使用spring方式来实现aop编程

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

spring 注解&amp;XML实现AOP编程

注解方式实现AOP编程 注解方式步骤: 1) 先引入aop相关jar文件           (aspectj  aop优秀组件) spring-aop-3.2.5.RELEASE.jar    [spring3.2源码] aopalliance.jar                 [spring2.5源码/lib/aopalliance] aspectjweaver.jar               [spring2.5源码/lib/aspectj]或[aspectj-1.8.2\lib

spring学习笔记——面向切面编程AOP二

上一篇介绍了一些概念,这篇我们开始进行编写代码. 1.编写切点: 如图所示的切点表达式表示当Instrument的play()方法执行时会触发通知.方法表达式以*号开始,标识了我们不关心方法返回值的类型.然后,我们指定了全限定类名和方法名.对于参数列表,我们使用(..)标识切点选择任意的play()方法,无论该方法的入参是什么.当我们需要配置切点仅匹配com.springinaction.springidol包,可以使用within()指示器来限制匹配. 除此之外,spring 2.5还引入一个

Spring学习(二十五)Spring AOP之增强介绍

课程概要: Spring AOP的基本概念 Spring AOP的增强类型 Spring AOP的前置增强 Spring AOP的后置增强 Spring AOP的环绕增强 Spring AOP的异常抛出增强 Spring AOP的引介增强 一.Spring AOP增强的基本概念 Spring当中的专业术语-advice,翻译成中文就是增强的意思. 所谓增强,其实就是向各个程序内部注入一些逻辑代码从而增强原有程序的功能. 二.Spring AOP的增强类型 首先先了解一下增强接口的继承关系 如上图

spring学习笔记——面向切面编程AOP三

前面介绍了aop的xml的简单配置和使用,下面介绍一下aop的注解使用方式的例子,可以对照第二篇的 pom文件是相同的: spring.xml文件: <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XML