Spring学习十三----------Spring AOP的基本概念
© 版权声明:本文为博主原创文章,转载请注明出处
什么是AOP
-面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
-主要的功能是:日志记录、性能统计、安全控制、事务处理、异常处理等
AOP实现方式
-预编译
-AspectJ
-运行期动态代理(JDK动态代理、CGLib动态代理)
-Spring AOP、Jboss AOP
AOP相关概念
-切面(Aspect) 一个关注点的模块化,这个关注点可能会横切多个对象
-连接点(Joinpoint) 程序执行过程中的某个特定的点
-通知(Advice) 在切面的某个特定的连接点上执行的动作
-切入点(Pointcut) 匹配连接点的断言,在AOP中通知和一个切入点表达式关联
-引入(Introduction) 在不修改类代码的前提下,为类添加新的方法和属性
-目标对象(Target Object) 被一个或者多个切面所通知的对象
-AOP代理(AOP Proxy) AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)
-织入(Weaving) 把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象,分为:编译时织入、类加载时织入、执行时织入
Advice的类型
-前置通知(Before advice) 在某连接点(join point)之前执行的通知,但不能阻止连接点前的执行(除非它抛出一个异常)
-返回后通知(After returning advice) 在某连接点(join point)正常完成后执行的通知
-抛出异常后通知(After throwing advice) 在方法抛出异常退出时执行的通知
-后通知(After(finally) advice) 当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)
-环绕通知(Around Advice) 包围一个连接点(join point)的通知
Spring中AOP的用途
-提供了声明式的企业服务,特别是EJB的替代服务的声明
-允许用户定制自己的方面,以完成OOP和AOP的互补使用
Spring的AOP实现
-纯Java实现,无需特殊的编译过程,不需要控制类加载器层次
-目前只支持方法执行连接点(通知Spring Bean的方法执行)
-不是为了提供最完整的AOP实现;而是侧重于提供一种AOP实现和Spring IoC容器之间的整合,用于帮助解决企业应用中的常见问题
-Spring AOP不会和AspectJ竞争,从而提供综合完整的AOP解决方案
Spring AOP的代理方式
-默认使用标准的JavaSE动态代理作为AOP代理,使得任何接口(接口集)都可以被代理
-如果一个业务对象并没有实现一个接口,也可以使用CGLIB代理
参考:http://www.imooc.com/video/4418
Spring学习十三----------Spring AOP的基本概念的更多相关文章
- spring学习 十三 注解AOP
spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解,也就是要开启注解扫描,注解的包是spring-context.jar,所以在配置文件中还要引入context约束,也 ...
- Spring学习(十三)-----Spring 表达式语言(Spring EL)
本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL.SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂 ...
- Spring学习笔记之aop动态代理(3)
Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. Person ...
- Spring学习(十一)-----Spring使用@Required注解依赖检查
Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...
- Spring学习(六)-----Spring使用@Autowired注解自动装配
Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...
- Spring学习笔记4——AOP
AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能. 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 ...
- spring学习(三) ———— spring事务操作
前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...
- spring 学习 一 spring 介绍
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. Spring ...
- spring学习12 -Spring 框架模块以及面试常见问题注解等
以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...
随机推荐
- vue.js单文件组件中非父子组件的传值
最近在研究vue.js,总体来说还算可以,但是在web开发群里有一些人问在单文件组件开发模式中非父子组件如何传值的问题,今天在这里讲讲,希望对大家有所帮助! 在官网api中的这段讲解很少,也很模糊:官 ...
- 关于设置组件的state时遇到的一些问题
在使用react-bootstrap的时候设置showModel的值来控制Model的显示与隐藏,但是setState这个函数是异步的. 当你进行数据更新的时候,接着执行函数获取这个模态框的dom是获 ...
- 关于 react state的改变数据上面的一点问题
在react当中 比如说 this.state = { loginInfo: { account: "...", password: "..." } } thi ...
- 面试:ios 批量上传图片
这几天面试,被问到关于GCD的用法,想了想,之前项目好像确实用的比较少,只是知道怎么用,有思路,但是却从来没有试过,回来之后,就尝试写了下: 封装图片上传的方法 /**批量上传图片*/ + (NSUR ...
- 运输问题2(cogs 12)
[问题描述] 一个工厂每天生产若干商品,需运输到销售部门进行销售.从产地到销地要经过某些城镇,有不同的路线可以行走,每条两城镇间的公路都有一定的流量限制.为了保证公路的运营效率,每条公路都有一 ...
- [CODEVS2035]机票打折问题
题目描述 Description .输入机票原价(3到4位的正整数,单位:元),再输入机票打折率(小数点后最多一位数字).编程计算打折后机票的实际价格(单位:元.计算结果要将个位数四舍五入到十位数“元 ...
- poi导出excel文件(桃)
1.基本可以通用的工具类 package com.idcsol.apps.common.excel; import java.io.IOException; import java.io.Output ...
- Android开发基础(java)14
Java语言与其他编程语言的最大不同之处在于:java有专门的异常处理机制,实现对各类异常情况进行有效控制. 一.基本概念:异常和错误的区别与联系: (1).定义形式不同:异常为exception:错 ...
- git的使用学习(六)git的标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...
- 利用Django徒手写个静态页面生成工具
每个Geek对折腾自己的博客都有着一份执念 背景介绍 曾经多次在不同的平台写博客,但全部都以失败而告终.去年七月选择微信公众号做为平台开始了又一次的技术分享,庆幸一直坚持到现在,但随着文章发表的越来越 ...