Spring实战(九)AOP概念以及Spring AOP

  1、横切关注点(cross-cutting concern)

  软件开发中,散布于应用中多处的功能被称为横切关注点,如事务、日志、安全。

  横切关注点从概念上是与应用的业务逻辑相分离的(但是往往会直接嵌入到应用的业务逻辑中),而把横切关注点和业务逻辑分离正是AOP要解决的问题。

  DI用于应用对象之间的解耦,AOP实现横切关注点与他们所影响的对象之间的解耦。

  2、重用通用功能,最常见的技术是继承和委托

  继承会导致脆弱的对象体系;委托可能需要对委托对象进行复杂的调用。

  所以用切面取而代之。

  3、AOP术语

  Aspect:切面——把横切关注点模块化为特殊的类,这些类称为切面。

  Advice:通知or增强——所要增强or增加的功能,有Before,After,After-returning,After-throwing,Around

  Join Point:连接点——应用执行过程中,能够插入切面的所有“点”(时机)

  Pointcut:切点——实际运行中,选择插入切面的连接点,即定义了哪些点得到了增强。

  Introduction:引入——向现有的类添加新方法和属性。

  Weaving:织入——把切面应用到目标对象并创建新的代理对象的过程。(也可以为植入)

  4、早目标对象的生命周期中,有多个点可以进行织入:

  • 编译期——需要特殊的编译器,AspectJ的织入编译器是以这种方式织入切面。
  • 类加载期——切面在目标类加载到JVM时被织入,需要特殊的类加载器,使目标类被导入应用之前增强该目标类的字节码。
  • 运行期——切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态创建一个代理对象,Spring AOP以这种方式织入切面!

  

  5、Spring中提供了4种类型的AOP支持

  • 基于代理的经典Spring AOP;
  • 纯POJO切面——XML配置
  • @AspectJ注解驱动的切面——无需XML配置
  • 注入式AspectJ切面

  前三种是Spring AOP实现的变体,Spring AOP构建在动态代理基础上,因此,Spring对AOP的支持局限于方法拦截。如果你的AOP需求超过了简单的方法调用,如构造器或者属性拦截,那么你需要考虑使用AspectJ来实现切面

  6、Spring创建的通知都是用标准的Java类编写的,定义通知应用的切点可以使用注解或在Spring配置文件中用XML编写。

  AspectJ则用特有的AOP语言,可以获得更强大和细粒度的控制。

  7、Spring在运行时通知/增强目标对象——动态代理

  Spring中的切面由包裹了目标对象的代理类实现。代理类拦截并处理方法的调用,执行额外的切面逻辑,然后再调用目标对象的方法。

  那代理对象是什么时候创建的呢?

  当被代理的bean被真正应用时,Spring才创建代理对象。

  被代理的对象又是什么时候创建?

  如果使用AppplicationContext,AppplicationContext从BeanFactory中加载所有bean时,Spring创建被代理对象。

  8、Spring只支持方法级别的连接点。

  AOP中连接点的模型有多种,如字段和构造器接入点。

  但Spring只支持方法连接点,所以无法创建细粒度的通知。

原文地址:https://www.cnblogs.com/bigbigbigo/p/8370130.html

时间: 2024-10-01 08:04:56

Spring实战(九)AOP概念以及Spring AOP的相关文章

[Spring实战系列](8)Spring注入方式之setter注入

通常,JavaBean 的属性是私有的,同时拥有一组存取器方法,以setXXX() 和getXXX() 形式存在.Spring 可以借助属性的set方法来配置属性的值,以实现setter方式的注入. 1. 注入简单值 在Spring 中我们可以使用<property> 元素配置Bean 的属性.<property>在许多方面都与<constructor-arg> 类似,只不过一个是通过构造参数来注入值,另一个是通过调用属性的setter 方法来注入值. 举例说明,让我们

&lt;Spring实战&gt;3:最小化Spring XML配置

1 自动装配 Bean 属性 1.1 4 种类型的自动装配 byName:把与 Bean 的属性具有相同名字或 ID 的其他 Bean 自动装配到 Bean 的对应属性中 byType:把与 Bean 的属性具有相同类型的其他 Bean 自动装配到 Bean 的对应属性中 constructor:把与 Bean 的构造器入参具有相同类型的其他 Bean 自动装配到 Bean 构造器的对应入参中 autodetect:首先尝试使用 constructor 进行自动装配,如果失败再尝试使用 byTy

[Spring实战系列](5)Spring应用上下文

下面是Spring-Hello-world项目的运行代码: package com.sjf.bean; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 测试类 * @author sjf0115 * */ public class Test { private static

[Spring实战系列](16)面向切面编程(AOP)概述

1. 简介 在软件中,有些行为对于大多数应用都是通用的.日志,安全和事务管理的确很重要,但他们是都是应用对象主动参与的行为呢?如果让应用对象只关注自己所针对的业务领域问题,而其他方面的问题由其他应用对象来处理,这样会不会更好? 在软件开发中,分布于应用中多处的功能被称为横切关注点.通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离是面向切面编程索要解决的. 上图展示了一个被划分为模块的典型应用.每个模块的核心功能都是为特

Spring+IOC(DI)+AOP概念及优缺点

Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应用一般不依赖于spring的类. 容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置.如对象的创建.销毁.回调等. 框架:Spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专注于开发应用逻辑. Spring的优点1.降低了组件之间的耦合性 ,

spring AOP概念讲解

在软件中,有些行为对于大多数应用都是通用的.比如:日志.安全和事务.如果每个方法里面都去写记日志的方法逻辑,是不是觉得很麻烦,耦合度过高.如果让应用对象只关注自己所针对的业务领域问题,而其他方面的问题由其他应用对象处理,这会不会更好了? 在软件开发中,分布于应用中多处的功能被称为横切关注点.通常,这些横切关注点从概念上是于应用的业务逻辑是分离的(但是往往直接嵌入到应用的业务逻辑之中).将这些横切还珠点于业务逻辑相分离正是面向切面编程(AOP)所要解决的. 1.什么是面向切面编程 前面说了,切面能

spring Aop概念

面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面.切面能对关注点进行模块化,例如横切多个类型和对象的事务管理.(在AOP术语中通常称作横切(crosscutting)关注点.) AOP框架是Spring的一个重要组成部分.但是Spring IoC容器并不依赖于AOP,这意味着你有权利选择是否使用AOP,AOP做为Spring IoC容器的一个补充,使它成为一个强大的中间件

spring学习九 spring aop详解

本文来自于:https://www.cnblogs.com/jingzhishen/p/4980551.html AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需 要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从上到下的关系,但并不适合定义

spring中的ioc和aop概念

众所周知,现在最流行的三大框架就是Spring.Spring MVC和Mybatis.使用Spring,主要是方便了普通的程序员进行快速开发. 控制反转(IOC,Inversion Of Controll) 控制反转指的是对象创建责任的反转.原本我们需要创建一个对象必须要手动去new一个,那么在类中由于代码越来越多,需要管理的依赖和引用也会越来越多,代码维护的成本也会越来越高.Spring就把创建对象的控制权交给了IOC容器去完成. 举个例子,某一天你生病了,但是你不清楚自己到底得了什么病,你只