Spring知识点(二) 面向切面AOP

标签: spring aop
63人阅读 评论(0) 收藏 举报
分类:

AOP概念

AOP aspect Oriented Program 面向切面(方面)编程

采取横向抽取机制,取代传统的纵向继承体系重复性代码,一般实现:性能监控,事务管理,安全检查,缓存等功能

原理

对于扩展功能来说
原来:修改源代码
后来:纵向抽取机制,继承BaseClass,调用super方法()
再后来:横向抽取机制

底层:动态代理方式实现 :

使用动态代理创建接口的*实现类的代理对象*(一个对象能实现和原来的对象相同的功能,和原来的对象平级,也实现了接口,但不是真正的对象)

针对有接口的对象:jdk的动态代理
针对任意对象:cjlib动态代理:创建其子类的动态代理对象,子类中调用父类的方法增强
(代理有三种方式静态,jdk动态,cjlib动态)

操作术语

Joinpoint:连接点:可以被增强的方法(Spring只支持方法类型的连接点)

Pointcut:切入点:实际增强的方法

Advice:通知/增强:实际增强方法的逻辑(就是一个方法)

前置通知:
后置通知:
异常通知:出现异常时出现的通知
最终通知:在后置之后来执行的通知
环绕通知:之前之后都可以通知

Aspect:切面:把通知应用在具体的方法上面的过程,称为切面(把增强应用到切入点上的过程)

Introduction:引介:可以动态向类中增加属性和方法

Target:目标对象:增强方法所属的对象

Weaving:织入:把增强用到目标的过程

Proxy:代理:一个类被AOP增强之后就产生一个结果代理类

配置使用

1.使用表达式配置切入点
常用表达式
execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)

(1)execution(* com.luhao.service.IBookService.add(..))方法要写全路径
(2)execution(* com.luhao.service.IBookService.*(..))
(3)execution(* *.*(..)) 任意类任意方法都增强
(4)save*.*(..)
(5)com.luhao.service.*(..) 不包含子包
(6) com.luhao.*..*(..) 包含子孙包
...

2.使用AspectJ实现AOP
AspectJ是一个面向切面的单独的框架,拓展了Java语言.可以配合Spring一起来实现AOP
Spring2.0以后增加了AspectJ的支持

有两种方式:

1.基于Aspectj的xml配置文件
2.基于Aspectj的注解的方式

流程:

1.Jar包(aop,aspect,两个依赖)
2.约束(1个)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->

</beans>
3.创建类,配置对象
4.在aop-config中配置切入点
<aop:pointcut expression="execution(public *.*(..))" id="pointcut1">
切面aop:aspect
<aop:aspect ref="增强的类">
    <aop:before method="增强的类中的方法作为前置增强" pointcut-ref="pointcut1">
</aop:aspect>

aop:after-returning :后置

aop:after:最终

aop:around:环绕需要参数:proceedingJoinPoint

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 扫描需要的包 -->
<context:component-scan base-package="com.luhao.*"></context:component-scan>
<!-- 创建需要的对象-->
<bean id="userAspect" class="com.luhao.aop.UserAspect"></bean>
<bean id="userService" class="com.luhao.service.impl.UserServiceImpl"></bean>
<bean id="userDao" class="com.luhao.dao.impl.UserDaoImpl"></bean>
<!-- 配置切点 -->
<aop:config>
    <aop:pointcut expression="execution(* com.luhao.*..*(..))" id="pointcut1"/>
<!-- 配置切面 -->
    <aop:aspect ref="userAspect">
<!--        <aop:before method="before" pointcut-ref="pointcut1"/>
        <aop:after-returning method="after" pointcut-ref="pointcut1"/> -->
        <aop:around method="around" pointcut-ref="pointcut1"/>
    </aop:aspect>
</aop:config>
</beans>
查看评论

SpringAOP面向切面详解(带实例)

了解AOP的相关术语1.通知(Advice):通知定义了切面是什么,以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。2.连接点(Joinpoint):程序能够应用通知的一个“时机”,这些“...
  • u012150370
  • u012150370
  • 2016-05-13 14:06:55
  • 10049

Spring AOP实现:面向切面编程——动态代理原理

1.  Aop-----面向切面编程:原理动态代理 1、 aop在spring中的作用 a)    提供声明式事务 b)    允许用户自定义切面,在不改变原有功能的前提下,添加新的功能。 2...
  • m_q_x
  • m_q_x
  • 2017-09-08 11:16:21
  • 353

Spring框架运行机制(控制反转,依赖注入,面向切面AOP)

文章属于入门级水平,重要事情说三遍,入门级,入门级,入门级 Mybatis: 实现IOC的轻量级的一个Bean的容器 Inversion of control 控制反转:由容器控制程序之间的关系,...
  • fei641327936
  • fei641327936
  • 2016-07-24 17:34:54
  • 3134

从头认识Spring-1.2 什么是AOP?为什么需要面向切面编程?

这一章节我们来介绍一下什么是AOP?为什么需要面向切面编程?1.什么是AOP?(百度百科版)AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过...
  • raylee2007
  • raylee2007
  • 2016-01-29 14:14:43
  • 5761

深入解读spring4的面向切面编程AOP

读了>中的面向切面编程一章后,觉得有必要记录一下,自己对面向切面编程的理解,必定概念是概念,理解是理解; 为什么会有面向切面编程:主要是为了解脱业务主要功能模块,叫你的业务功能更专一,更简单,写起来...
  • wu1226419614
  • wu1226419614
  • 2017-04-15 14:01:55
  • 693

什么是面向切面编程AOP?

作者:知乎用户 链接:https://www.zhihu.com/question/24863332/answer/48376158 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非...
  • u010012493
  • u010012493
  • 2017-02-18 11:20:10
  • 737

Spring-aop面向切面编程实例

  • 2010年03月02日 10:38
  • 6.34MB
  • 下载

spring的IOC(控制反转)与AOP(面向切面编程)

一直对spring的两大特性IOC与AOP了解的模模糊糊,不知道怎么区分,怎么理解。 今天看了一篇讲spring常用注解的文章和spring AOP的文章,引用这两个作者的观点,感觉对这两个特性的了...
  • u013538390
  • u013538390
  • 2015-07-02 18:24:09
  • 2350

【Spring】AOP - 面向切面

AOP
  • robinjwong
  • robinjwong
  • 2014-05-26 03:45:36
  • 11711

Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式

Spring框架的作用:为了简化java开发 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On...
  • h348592532
  • h348592532
  • 2015-05-07 22:19:24
  • 2559
    个人资料
    持之以恒
    等级:
    访问量: 4233
    积分: 477
    排名: 10万+