spring之AOP(重点!!!!)

1.AOP定义
AOP:Aspect-Oriented Programming “面向切面编程”,通过预编译的方式和运行期间动态代理实现程序功能的统一维护的技术。AOP是OOP(面向对象编程)的延伸。
简单的说AOP的编程思想:把业务逻辑和横切的问题进行分离,从而达到解耦的目的,使代码的重用性和开发效率高(目的是重用代码,把公共的代码抽取出来)

2.AOP在spring中的作用?
作用:提供声明式事务,允许用户自定义切面。

3.springAOP中可以通过advice定义横切逻辑,spring中支持5种类型的advice

4.AOP的发展历程(了解即可)
4.1静态AOP(第一代)
以AspectJ为代表,特点:相应的横切关注点以Aspect形式实现后,会通过特定的编译器,将实现后的Aspect编译并织入到系统的静态类中。
优点:Aspect直接以java字节码的形式编译到java类中,java虚拟机可以像通常加载java类运行,不会对整个系统运行造成任何性能损失。
缺点:灵活性不够。
4.2动态AOP(第二代)
通过java语言提供的各种动态特性来实现Aspect织入当前系统的过程。spring AOP就是第二代的AOP!!!
5.AOP的公民(了解即可)
Joinpoint:拦截点,如某个业务方法。
Pointcut:Joinpoint的表达式,表示拦截哪些方法。一个Pointcut对应多个Joinpoint。
Advice: 要切入的逻辑。
Before Advice 在方法前切入。
After Advice 在方法后切入,抛出异常时也会切入。
After Returning Advice 在方法返回后切入,抛出异常则不会切入。
After Throwing Advice 在方法抛出异常时切入。
Around Advice 在方法执行前后切入,可以中断或忽略原有流程的执行。

6.spring AOP 的实现机制
spring AOP通过动态代理机制和字节码生成技术实现。
6.1动态代理机制
动态代理的核心:代理对象的生成
实现:主要由一个类、一个接口组成。即java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。

7.springAOP有哪些不同的通知类型?
前置通知(Before advice):在连接点之前执行的Advice,不过除非它抛出异常,否则没有能力中断执行流。使用 @Before 注解使用这个Advice。
后置通知(After advice) 无论连接点是通过什么方式退出的(正常返回或者抛出异常)都会执行在结束后执行这些Advice。通过 @After 注解使用.
围绕通知(Around advice) 围绕连接点执行的Advice,就你一个方法调用。这是最强大的Advice。通过 @Around 注解使用。
返回之后通知(After Retuning advice) 在连接点正常结束之后执行的Advice。例如,如果一个方法没有抛出异常正常返回。通过 @AfterReturning 关注使用它。
抛出异常后通知(After Throwing advice) 如果一个方法通过抛出异常来退出的话,这个Advice就会被执行。通用 @AfterThrowing 注解来使用。

8.AOP的应用场景?
日志记录
权限验证
效率检测
事务管理(spring的事务就是用AOP实现的)
9.什么是织入(weaving)?
毛主席:“一桥飞架南北,天堑变通途”织入过程就是“飞架”。
将切面与外部的应用类型或者类连接起来以创建通知对象的过程就是织入
织入器:完成织入过程的那个“人”就是织入器(完成横切关注点逻辑到系统的最终织入)
例如:AspectJ的织入器是编译器ajc、JBoss的织入器是类加载器、spring AOP 的织入器是ProxyFactory类
10.引介(Introduction)是什么?
让一个切面可以声明被通知的对象实现了任何他们没有真正实现的额外接口,而且为这些对象提供接口的实现
使用 @DeclareParaents 注解来生成一个引介。
11.什么是连接点(Joint Point)和切入点(Point cut)?
(1)连接点:程序执行的一个点。(比如:一个方法的执行或者一个异常的处理)spring AOP中,一个连接点总是代表一个方法执行。
(2)切入点:匹配连接点的断言或表达式。Spring 默认使用 AspectJ 切入点表达式语言。

spring篇(五)官封弼马温相关推荐

  1. mybatisplus修改单个属性_第二节 官封弼马温——类的属性

    <西游记>第2集 官封弼马温 美猴王战胜了混世魔王,花果山上喜气洋洋,小猴们每日操演武艺,十分快乐.悟空闯入东海龙宫,向龙王索取镇海神针--如意金箍棒.这棒虽重一万三千五百斤,却大可撑天着 ...

  2. 【西行 - 官封弼马温】Java 基本程序设计结构

    J3 - 白起 Java(Java基础 # 程序设计结构 # 笔记) 1.Hello World 下面是一个简单的 Java 应用程序,它会在程序控制台中打印一句话 "Hello World ...

  3. 国内外物联网平台初探(篇五:机智云平台)

    国内外物联网平台初探(篇五:机智云平台) ------ [导读]------ 物联网智库将在每周五下午的第二篇文章推送由马智先生研究撰写的系列文章--<国内外物联网平台初探>. 物联网智库 ...

  4. 一篇五分生信临床模型预测文章代码复现——Figure1 差异表达基因及预后基因筛选——下载数据(一)

    之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1 ...

  5. Vue实战篇五:实现文件上传

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  6. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包

    下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...

  7. Spring Boot(五):spring data jpa的使用

    Spring Boot(五):spring data jpa的使用 一.spring data jpa介绍 1,JPA是什么 JPA(Java Persistence API)是Sun官方提出的Jav ...

  8. 《Spring Cloud Netflix官方文档》2. 服务发现:Eureka服务器

    2. 服务发现:Eureka服务器 2.1 如何创建Eureka服务器 引用org.springframework.cloud的spring-cloud-starter-eureka-server就可 ...

  9. 《Spring Cloud Netflix官方文档》1.服务发现:Eureka客户端

    1.     服务发现:Eureka客户端 服务发现是微服务架构的关键原则之一.使用手动配置或一些约定方式来处理多服务多实例的方式是非常困难,并且十分脆弱的.Eureka同时是Netflix服务发现的 ...

最新文章

  1. 整理了 25 个 Pandas 实用技巧,拿走不谢!
  2. 老铁 666!快手上市暴涨 200%,超 4000 员工成为千万富翁
  3. PHP替换字符串函数strtr()和str_replace()
  4. 【单机实现系列】SCDPM2012实现数据保护
  5. x-code 4.61 无证书真机调试
  6. 二十种实战调优MySQL性能优化的经验(转自公众号:架构之家 2018-05-08)
  7. 我的世界变betty指令_Betty Hacker将开放式硬件电子产品嵌入蛋糕中
  8. WCF 项目应用连载[8] - 绑定、服务、行为 大数据传输与限流 - 下 (ServiceThrottlingAttribute)...
  9. ubuntu 关机后 自动重启 解决方法
  10. Camera 驱动 读取摄像头ID失败问题、低温下Camera打开花屏或者读不到id、概率性读取不到id
  11. 加密的压缩包文件如何解压
  12. springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码)
  13. iPhone怎么设置代理ip
  14. 微信聊天记录长图切割
  15. 阿里P8传授给小老弟的Java面试宝典,竟让让小弟也拿到了P8的offer,傻眼了
  16. 计算机辅助制图CAC,cac-
  17. 溺水舆情管控工作总结
  18. gts250 linux驱动下载,英伟达GTS250显卡驱动下载_GTS250显卡驱动官方版下载 - 系统之家...
  19. 二〇二三-三-二十三
  20. 记一次腾讯实习招聘(笔试)

热门文章

  1. android驱动开发 老罗,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(老罗学习笔记3)...
  2. html 设置元素向左浮动
  3. python能参加奥赛吗-信息竞赛一定要python吗
  4. 黑客攻击入侵流程及常见攻击工具
  5. JS高级进阶总结day01---面向对象编程介绍,new的工作原理以及构造函数,原型对象,实力函数三者之间的关系
  6. 孙陶然:每个成功企业的背后都有一系列的创新
  7. debian 刷新dns命令
  8. vue中this.$nextTick()使用解析
  9. oracle审计功能有什么用,Oracle审计功能
  10. Cmd批处理替换文件