Spring中AOP原理,使用笔记

AOP(面向切面编程):通过预编译和运行期动态代理的方式在不改变代码的情况下给程序动态的添加一些功能。利用AOP可以对应用程序的各个部分进行隔离,在Spring中AOP主要用来分离业务逻辑和系统级服务。

系统级服务指的是:事务处理,日志记录,性能统计,安全控制,异常处理等,因为这些功能分散在程序的各个模块中,又是通用的,所以可以将它从业务逻辑中分离出来。

连接点(joinpoint):在连接点可以拦截方法的执行,在连接点前后织入上述的这些系统级服务(织入的就是通知)。

切入点(pointcut):连接点的集合。根据切入点表达式来确定我们将执行拦截的位置。

通知:到达连接点时执行的代码,即我们织入的功能。

以前的Spring,我们要使用AOP,在编写通知时必须实现一些接口,如:实现Before Advice时,Advice类要实现org.springframework.aop.MethodBeforeAdvice接口。

现在有另外两种方式,

(1)基于XML Schema的设置,

1. package com.savage.aop;  
2.   
3. import org.aspectj.lang.JoinPoint;  
4.   
5. public class LogBeforeAdvice {  
6.     public void before(JoinPoint joinPoint) {  
7.         System.out.println("Logging before " + joinPoint.getSignature().getName());  
8.     }  
9. }

对应XML中的相关配置

<bean id="beforeAdvice" class="test.advice.BeforeAdvice"
/>

<aop-config>

  <aop-aspect id="aspectOne" ref="beforeAdvice">

    <aop-pointcut id="pointcutOne exepression="execution(*
test.service.*.*(..))" />

    <aop-before pointcut-ref="pointcutOne" method="before"
/>  //也可直接简写成<aop-before pointcut="execution(* test.service.*.*(..))"
method="before" />,去掉<aop-pointcut />

  </aop-aspect>

</aop-config>

如上,编写通知类不用实现任何接口,JoinPoint对象代表的就是当前连接点,供织入功能时使用,通过它可获得目标对象(getTarget()方法),目标方法名(getSignature().getName()),目标方法接收的实参(getArgs(),返回对象数组)等信息。

(2)注解式写法

Spring中AOP原理,使用笔记,布布扣,bubuko.com

时间: 2024-10-18 01:24:19

Spring中AOP原理,使用笔记的相关文章

spring中aop原理

Spring之AOP原理_动态代理

面向方面编程(Aspect Oriented Programming,简称AOP)是一种声明式编程(Declarative Programming).声明式编程是和命令式编程(Imperative Programming)相对的概念.我们平时使用的编程语言,比如C++.Java.Ruby.Python等,都属命令式编程.命令式编程的意思是,程序员需要一步步写清楚程序需要如何做什么(How to do What).声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么

spring ioc aop 原理

spring ioc aop 原理 spring ioc aop 的原理 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分. 在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例.但在spring里创建被调用者的工作不再由调用者来完成,因此控制反转(IoC):创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也被称为依赖注入(DI),依赖注入和控制反转是同一个概念. 面向方面编程(AOP)是以另

Spring的AOP原理

一.什么是 AOP AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需要为分散的对象引入公共行为(日志.安全.事务)的时候,OOP则显得无能为力.也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系.例如日志功能.日志代码往往水平地散布在所有对象层次中,而与它所

Spring中AOP简介与使用

Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操做.即通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 为什么要用AOP? 日志记录,性能统计,安全控制,事务处理,异常处理等等.例如日志记录,在程序运行的某些节点上添加记录执行操作状态的一些代码,获取执行情况.而通过切面编程,我们将这些插入的内容分离出来,将它们独立

Spring中AOP实例详解

Spring中AOP实例详解 需要增强的服务 假如有以下service,他的功能很简单,打印输入的参数并返回参数. @Service public class SimpleService { public String getName(String name) { System.out.println(get name is: + name); return name; } } 定义切面和切点 @Component @Aspect public class L ogAspect { // 定义切

Spring中AOP的一个通俗易懂的理解(转)

这是看到的一个最易懂得AOP简介了,适合初学者理解. 转自:http://www.verydemo.com/demo_c143_i20837.html 1.我所知道的aop 初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等.一下子让你不知所措,心想着:怪不得很多人都和我说aop多难多难.当我看进去以后,我才发现:它就是一些java基础上的朴实无华的应用,包括ioc,包括许许多多这样的名词,都是万变不离其宗而已. 2.为什么用aop 1就是为了方便

spring中aop不生效的几种解决办法

先看下这个问题的背景:假设有一个spring应用,开发人员希望自定义一个注解@Log,可以加到指定的方法上,实现自动记录日志(入参.出参.响应耗时这些) package com.cnblogs.yjmyzz.springbootdemo.aspect; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy

6.Spring中AOP术语与XML方式简单实现

1.AOP术语 1. Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点 2. Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义 3. Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能) 4. Introduction(引介):引介是一种特殊的通知在不修改类代