Spring入门篇——AOP基本概念

1、什么是AOP及实现方式

什么是AOP

  • AOP:Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
  • 主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等

AOP实现方式

  • 预编译

  -ApectJ

  • 运行期动态代理(JDK动态代理、CGLib动态代理)

  -SpringAOP、JbossAOP

2、AOP基本概念

连接点:比如一个类中某个方法执行的开始

通知:在某个方法执行的时候,额外执行的切面的动作

切入点:如何在切面中去匹配一个具体的连接点

引入:源代码中并没有这样的方法和属性,通过修改字节码文件为类增加新的方法和属性

目标对象:比如说我们有订单service和商品service,切面会通知所有的service在去执行数据库操作的时候,去加上事务的控制,这两个sevice就是目标对象,也就是被切面所通知的对象

Advice的类型

前置通知:比如说这个连接点是一个方法,那么前置通知就是在方法之前执行的,在进入到方法之前执行的

返回后通知:在某个方法执行完成并返回值后再去执行的通知

抛出异常后通知:当某个方法抛出异常之后才会被执行到的通知

3、Spring中的AOP

Spring框架中AOP的用途

  • 提供了声明式的企业服务,特别是EJB的替代服务的声明(EJB是企业级javabean)
  • 允许用户定制自己的方面,以完成OOP(面向对象编程,实现一个功能的顺序)与AOP(横切的方式,在各个功能之间横切的功能)的互补使用

Spring的AOP实现

有接口和无接口的Spring Aop实现区别

4、Schema-based AOP

配置切面aspect

配置切入点Pointcut

Spring AOP、AspectJ都支持

只有Spring AOP支持

例子1:

例子2:

配置一个完整的<aop:config>

前置通知

声明Before advice的两种方式

在返回之后的通知

pointcut-ref :引用某一个切入点

method:在After returning advice这个通知上要执行的方法是什么样

returning="retVal":限制返回值

抛出异常之后返回

返回的通知:在返回之后或者可以理解是方法结束前的最后一条代码取执行after advice,无论方法是否正常结束,after advice都会被执行

环绕通知

通知里面使用参数的方式

Introductions

配置

Advisors的配置

5、Spring AOP API

ProxyFactoryBean及相关内容

ProxyFactoryBean通过以下方式来达到代理的目的

6、AspectJ

AspectJ注解的具体使用

任何包的类下面只要有transfer方法,都会匹配这个切入点anyOldTransfer

切入点支持哪些种定义方式或者哪些个点可以定义

定义两个连接点(切入点)

切入点1:执行com.imooc.aop.aspect.biz包下面所有以Biz结尾的类的任何类型的方法的时候,都会匹配当前的切入点

切入点2:当前这个包下的任何类都会匹配到这个切入点

执行所有public类型方法的时候会匹配这个切入点

如何定义良好的切入点?

在aspectj中advice的定义

例子

使用advice的两种方式

1.直接定义一个execution的表达式

2.使用一个已经存在的pointcut,也就是引用一个已经定义好的切入点

Advice扩展应用

Introductions实现方式

原文地址:https://www.cnblogs.com/songsongblue/p/9735835.html

时间: 2024-08-30 07:04:46

Spring入门篇——AOP基本概念的相关文章

spring 入门篇

spring 入门篇 相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低.开发商之间不统一.没有真正实现“写一次到处使用”,它的优点有如下: 低侵入式设计,代码污染极低. 独立于各种应用服务,真正实现写一次到处都可以使用. 用户可选择的自由度高,用户可以选择部分或者是全部SPRING的功能,它并不是设计来取代其它框架,可以和其它的框架(如STRUTS.HIBERNATE)等结合极好. 面向接口的编程方式,使得代码的偶合度降到最低

Spring入门介绍-AOP(三)

AOP的概念 AOP是面向切面编程的缩写,它是一种编程的新思想.对我们经常提起的oop(面对对象编程)有一定的联系. AOP和OOP的关系 AOP可以说是oop的某一方便的补充,oop侧重于对静态的属性和方法组合为对象,使得逻辑更加清晰,而aop是是从动态角度考虑,处理过程中某个步骤或者阶段,是从动态角度考虑的. AOP的功能 主要处理事务,日志,安全,异常统计等功能. AOP的价值 AOP专门用于处理分布于各个各个模块中的交叉关注点的问题,在J2ee应用中.通常用AOP来处理一些具有横切性质的

spring入门篇-学习笔记

1.spring IOC的作用就是用加载配置文件的方式代替在代码中new 对象的方式来实例化对象. 2.IOC 全称:Inversion  of Control,中文意思:控制反转 3.依赖注入有两种方式: 设值注入-> 通过添加set方法,并在配置文件的bean中添加property标签(property引用另一个bean)的方式注入 构造注入->通过构造方法,并在配置文件的bean中添加constructor-arg标签的方式注入 例子项目结构: 以下是各文件代码: InjectDao.j

Spring入门篇——第2章 Spring IOC容器

第2章 Spring IOC容器 介绍Spring IOC容器的基本概念和应用 2-1 IOC及Bean容器 在IOC容器中,所有对象都称为bean 2-2 Spring注入方式 原文地址:https://www.cnblogs.com/songsongblue/p/9895536.html

Spring入门篇7 ---- 简单介绍AOP

Spring-AOP 面向切面编程,它是对OOP的一种补充,OOP一般就是纵向关系,举个例子我们发一个用户信息的请求,正常情况下流程就是:身份验证 ——查询用户信息——日志记录(是情况而定)——返回信息,这个就是OOP面向对象编程,但如果有很多业务的话,那么身份验证,日志处理(一般AOP不会用于业务日志处理,否则以后运维的时候比较麻烦),会被调用很多次,这个时候可以引入AOP,他是面向切片处理,它会将程序横向截断,例如把权限模块进行抽离,实现解耦,如果后续权限需要调整只需要调整抽离出来的权限组件

Spring入门篇

编码1.什么是框架 2.Spring简介 3.IOC(配置.注解) 4.Bean(配置.注解) 5.AOP(配置.注解.AspectJ.API) 如何学习Spring 掌握用法 深入理解 不断实践 反复总结 再次深入理解与实践 似乎是学习所有技术的方式... 学习Spring的资源 http://spring.io/ http://projects.spring.io/spring-framework/ Spring是什么 控制反转(IOC):把控制权交出去,在使用的过程中直接去得到这样的对象

Spring课程 Spring入门篇 3-2 Spring bean装配(上)之bean的生命周期

本节主要讲了三大块内容 1 bean的生命周期概念 2 bean的初始化和销毁的三种方式对比(代码演练) 3 总结 1 bean的生命周期概念 1.1 bean的定义:xml中关于bean的配置,bean的id和bean的class等. 1.2 bean的初始化:ioc容器启动的时候加载xml文件中的bean生成实例. 1.3 bean的使用:bean容器中取出bean的实例并使用 1.4 bean销毁:指的是bean销毁时回收由这个bean创建的所有bean实例. 2 bean的初始化和销毁的

Spring入门之AOP实践:@Aspect + @Pointcut + @Before / @Around / @After

零.准备知识 1)AOP相关概念:Aspect.Advice.Join point.Pointcut.Weaving.Target等. ref: https://www.cnblogs.com/zhangzongle/p/5944906.html  有代码示例 2)相关注解:@Aspect.@Pointcut.@Before.@Around.@After.@AfterReturning.@AfterThrowing 一.实践目标 1)@Aspect的功能 2)@Pointcut的切面表达式 3)

spring入门篇2 --- IOC设计思想

在上一篇中已经大致了解了IOC的设计思想,IOC全拼是Inversion of Control,就是控制反转,以前我们都是自己创建对象,进行实例化,现在交给框架spring来进行控制,以实现高度的解耦. IOC是设计思想,是Spring的核心,我们必须要掌握,因此通过几个例子,来看看到底是如何实现的,这样就可以有更清晰的认知,所有的demo源码放在了github上,后续学习过程会进行持续的更新,以后不再赘述. 学习这个之前,我们需要了解一下什么是DI,Dependency Injection,依