第七章:AOP技术

前言:

AOP技术是根据动态代理设计模式进行的技术。动态代理技术分jdk动态代理和cglib动态代理

jdk动态代理特点:

(1)继承java.lang.reflect.proxy类

(2)实现了真实类实现的接口

(3)真实类和代理类之间的关系是:他们都实现了相同的接口

cglib动态代理特点:

特点:

(1)代理类是真实类的子类

注:本片文章主要理解AOP编程,至于动态代理技术不做过多介绍,有需要的话,可以留言,下篇文章可以进行讲解。

7.1:AOP原理概述

AOP:Aspect  Oriented  Programming,面向切面编程

传统形式,web项目执行流程:

缺点:

(1)Bad  Smell现象,指一些代码逻辑出现了在了不合适的层次。

例如:在service层有数据库的事务处理代码,不合乎规范

改进:

AOP编程:

本质上,属于动态代理设计模式

切面编程:类似于在链式程序指定流程中,在service层处进行截断,此处的断层成为切面,此处的service处的程序运行为竖向,可以看作service层的强化操作。

概念:

(1)Point(切点):表示要对哪个方法进行增强

(2)Advice(通知):表示额外增加的功能

(3)Aspect(切面):就是代理对象,(切面+切点)

(4)Weaving(织入):将通知添加到切点中的操作,生成动态代理的过程

7.2:AOP实现过程

7.2.1:导包

1. 日志包:

commons-logging.jar

2. Spring核心包:

spring-core.jar

spring-beans.jar

spring-context.jar

spring-expression.jar

3. aop依赖的jar包:

spring-aop.jar

aopalliance.jar -aop联盟提供的对aop的具体实现

7.2.2:测试用的service代码

spring支持两种动态代理的实现:

(1)如果提供了接口,就用jdk动态代理

(2)如果没有提供接口,就用cglib动态代理

7.2.3:提供通知

spring中的通知类型:

(1)前置通知:在切点方法调用前操作,MethodBeforeAdvice

(2)后置操作:在切点方法掉用后操作,AfterReturningAdvice

(3)异常通知:在切点方法执行发生异常时执行,ThrowsAdvice

(4)环绕通知:包含了前置通知、后置通知和异常通知,MethodInterceptor

  1. public class DemoBeforeAdvice implements MethodBeforeAdvice {
  2. @Override
  3. public void before(Method method, Object[] objects, Object o) throws Throwable {
  4. System.out.println("我是前置通知....");
  5. }
  6. }

  

7.2.4:配置AOP(织入/动态代理)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <!--配置service对象-->
  7. <bean id="userService" class="com.bjsxt.service.impl.UserServiceImpl" />
  8. <bean id="testService" class="com.bjsxt.service.TestService" />
  9. <!--配置通知对象-->
  10. <bean id="demoBefore" class="com.bjsxt.advice.DemoBeforeAdvice" />
  11. <!--配置织入, 生成动态代理-->
  12. <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
  13. <!--配置目标对象-->
  14. <property name="targetName" value="userService" />
  15. <!--配置通知-->
  16. <property name="interceptorNames">
  17. <array>
  18. <value>demoBefore</value>
  19. </array>
  20. </property>
  21. </bean>
  22. <bean id="testProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
  23. <property name="targetName" value="testService" />
  24. <property name="interceptorNames">
  25. <array>
  26. <value>demoBefore</value>
  27. </array>
  28. </property>
  29. </bean>
  30. </beans>

  

7.2.5:测试代码

  1. public class TestAOP {
  2. @Test
  3. public void testAop2() {
  4. //cglib动态代理
  5. ApplicationContext context =
  6. new ClassPathXmlApplicationContext("applicationContext.xml");
  7. TestService testProxy = context.getBean("testProxy", TestService.class);
  8. System.out.println(testProxy.getClass().getName());
  9. System.out.println(testProxy.getClass().getSuperclass().getName());
  10. testProxy.test();
  11. }
  12.  
  13. @Test
  14. public void testAop() {
  15. //jdk动态代理
  16. ApplicationContext context =
  17. new ClassPathXmlApplicationContext("applicationContext.xml");
  18. UserService userService = context.getBean("proxy", UserService.class);
  19. System.out.println(userService.getClass().getName());
  20. userService.demo();
  21. }
  22. }

  

Spring框架的AOP编程,最通俗的语言解释,易懂易学的更多相关文章

  1. 使用spring框架进行aop编程实现方法调用前日志输出

    aop编程 之使用spring框架实现方法调用前日志输出 使用spring框架实现AOP编程首先需要搭建spring框架环境: 使用Spring框架实现AOP工程编程之后,不需要我们去写代理工厂了,工 ...

  2. 10.Spring——框架的AOP

    1.Spring 框架的 AOP 2.Spring 中基于 AOP 的 XML架构 3.Spring 中基于 AOP 的 @AspectJ 1.Spring 框架的 AOP Spring 框架的一个关 ...

  3. Spring入门3.AOP编程

    Spring入门3.AOP编程 代码下载: 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 前面学习的知识是Spring在Java项目中的IoC或DJ,这 ...

  4. Spring 框架的 AOP 简介

    Spring 框架的 AOP Spring 框架的一个关键组件是面向方面的编程(AOP)(也称为面向切面编程)框架. 面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点. 跨一个应用程序的多 ...

  5. Spring框架之AOP源码完全解析

    Spring框架之AOP源码完全解析 Spring可以说是Java企业开发里最重要的技术.Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Orie ...

  6. Spring框架的AOP技术(注解方式)

    1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包 * 先引入Spring框架开发的基本开发包 * 再引入Spring框架的AOP的开发包 * spring的传统AOP的开发的包 * sp ...

  7. 谁能用通俗的语言解释一下什么是 RPC 框架

    转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题~ 谁能用通俗的语言解释一下什么是 RPC 框架? ...

  8. Spring框架(4)---AOP讲解铺垫

    AOP讲解铺垫      不得不说,刚开始去理解这个Aop是有点难理解的,主要还是新的概念比较多,对于初学者一下子不一定马上能够快速吸收,所以我先对什么事Aop做一个解释: 首先说明:本文不是自己所写 ...

  9. Spring框架及AOP

    Spring核心概念 Spring框架大约由20个功能模块组成,这些模块主分为六个部分: Core Container :基础部分,提供了IoC特性. Data Access/Integration ...

随机推荐

  1. Windbg Watch(监视)窗口的使用

    在WinDbg中,可以使用“监视”窗口显示和更改全局和局部变量和寄存器信息. 您可以自定义此窗口以显示您正在跟踪的项..“监视”窗口可以显示所需的任何变量列表.这些变量可以包括来自任何函数的全局变量和 ...

  2. proc介绍,free命令查看内存

    proc介绍 https://www.cnblogs.com/dongzhuangdian/p/11366910.html https://blog.csdn.net/majianting/artic ...

  3. 8-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(Apache 配置SSL,HTTPS连接)

    https://www.cnblogs.com/yangfengwu/p/10947423.html 和当时配置MQTT差不多,去下载证书文件   https://www.cnblogs.com/ya ...

  4. redis哨兵模式实现主从故障切换

    环境设定base2 172.25.78.12 masterbase3 172.25.78.13 slavebase4 172.25.78.14 slave1.配置一主二从环境在base2上[root@ ...

  5. 死磕Java内部类

    Java内部类,相信大家都用过,但是多数同学可能对它了解的并不深入,只是靠记忆来完成日常工作,却不能融会贯通,遇到奇葩问题更是难以有思路去解决.这篇文章带大家一起死磕Java内部类的方方面面. 友情提 ...

  6. 2018-2019-2 网络对抗技术 20165318 Exp 9 Web安全基础

    2018-2019-2 网络对抗技术 20165318 Exp 9 Web安全基础 基础问题回答 实践过程记录 WebGoat安装 SQL注入攻击 1.命令注入(Command Injection) ...

  7. 第9课 C++异常处理机制

    一. 回顾C++异常机制 (一)概述 1. 异常处理是C++的一项语言机制,用于在程序中处理异常事件(也被称为导常对象). 2. 异常事件发生时,使用throw关键字抛出异常表达,抛出点称为异常出现点 ...

  8. 【K8S】helm chart多环境部署最佳实践-示例

    Chart.yaml apiVersion: v1 appVersion: "1.0" description: A Helm chart for Kubernetes name: ...

  9. C#怎么判断字符是不是汉字 汉字和Unicode编码互相转换

    判断一个字符是不是汉字通常有三种方法,第1种用 ASCII 码判断(在 ASCII码表中,英文的范围是0-127,而汉字则是大于127,根据这个范围可以判断),第2种用汉字的 UNICODE 编码范围 ...

  10. Tomcat 部署 Jenkins (Linux系统)

    环境说明:Linux环境,CentOS 7版本. 关于部署tomcat,见上一篇博客:https://www.cnblogs.com/lelelong/p/10252225.html 接着,在Tomc ...