梳理一下概念,首先AOP它是什么东西,它是一个面向切面编程思想,反正一上升到思想,就意味着这哥们是跨语言,跨平台,就是AOP它是一个非常大的东西,就像面向对象的思想是一样的,所以咱们面向切面的思想,简单来说一下,万物皆对象,横向重复代码,纵向抽取,这是咱们面向切面的几句话,面向切面有啥不理解的,咱们从咱们以往接触过的三种情况,都能体验面向切面,能,对不对,所以面向切面的范围是很广的,对不对,过滤器,拦截器,动态代理,都有面向切面的思想体现在里面,然后呢,接下来第二,说一下以前学过的动态代理,那动态代理和AOP之间是啥关系,通过动态代理可以体现,AOP思想,反过来,体现AOP思想未必要用动态代理,过滤是不是也体现AOP,拦截器也体现AOP,所以动态代理仅仅是AOP的一个体现形式,所以再往下继续的话,那咱们动态代理又是什么,动态代理又是干啥的,动态代理你们不知道干嘛,所谓动态代理,对某一个目标对象和目标方法是不是进行增强,动态代理,咱们的目的,怎么写清楚一点,就按条列,通过动态代理体现AOP思想,对目标对象中的方法进行增强,那么再往下,所以有一个概念叫做Spring AOP开发,这个概念又是啥意思,咱们今天学的AOP开发,Spring AOP开发是啥意思,Spring封装了动态代理代码,用Spring AOP开发的目的是什么呢,我们就不需要手写动态代理代码,我们不要封装代码,其实是不用写的,当然介绍了一下Spring AOP的开发,他除了封装动态代理代码之外,还封装了cglib代理,封装了两个代理方法,咱们这块得出来的一个结论,那就意味着,可以对任何类进行代理增强,这两个有啥区别,上面的动态代理,必须基于接口代理,下面是不需要接口,所以不管你有接口还是没接口,是不是都可以进行代理,然后再往下

咱们学了一些名词,学了一些名词,Spring中的名词,这Spring中的名词,说白了就是你要玩AOP的话,把AOP那点事说清楚,AOP名词就是我手头有一个通知,通知里面写着,比如说,要增强的代码,然后另外一层,还有一个目标类,是不是有被代理的方法,void,比如save方法,这里面有业务逻辑,咱们是保存用户,然后这个方法不只save,可能还有update,修改用户,三个差不多了,还有一个delete,这个是删除用户,那咱们的目的,通知我们就写一行,管理事务,那现在咱们的AOP,最终的目的就是把通知,是不是插入到希望管理事务的方法当中,增强的这个方法,是不是插入到这个方法中去,那需要将这个代码插入到这里面去的话,这个方法在这个类当中,是不是叫目标类,那咱们说可以插入的方法,咱们是不是叫做什么,可以被插入,或者可以被应用通知的方法,就是连接点,然后呢,需要或者真正已经织入通知的的方法就是切入点,然后把通知真正织入到方法当中,这个过程叫做织入,把这两个结合叫做织入,这两个进行织入之后,是不是会生出一个子来,就是你吧通知织入到目标对象当中,产生一个什么对象,是不是代理对象,明白啥意思了,会生成一个代理对象,这个方法你可以想象的到,是不是相当于,就那这个保存为例,是不是这个管理事务,是不是进来了,在代理方法当中,就是这四个方法,是不是把通知应用进来了,这是不是就是代理对象,生成代理对象的过程,叫做织入,面向编程从头到尾不就这点知识吗,首先面向切面编程思想,思想是最大的,然后动态代理为了体现AOP思想

然后动态代理的目的,目的是干啥,是为了将目标方法增强,那Spring AOP干嘛,是怎么来写动态代理和cglib这些代码,他是不是把这些代码封装了,你只要配一配他就帮你写这些代码,那之后Spring AOP这些名词,是把通知织入到目标对象的过程,然后这些名词你要会叫,然后怎么来配,怎么来进行配置呢,那这个配置的话,要玩的话首先要导包,这是4+2的基础上再+2,然后准备目标对象,然后准备通知,咱们说Spring当中,他这个很体贴,准备了一种通知,准备了N多种通知,5种,使用咱们需要的各种情况,然后最后通过这种配置表达出来,咱们要讲通知织入到目标对象,咱们把目标对象和通知对象截图
 <!-- 1.配置目标对象 --><bean name="userService" class="com.learn.service.UserServiceImpl"></bean><!-- 2.配置通知对象 --><bean name="myAdvice" class="com.learn.d_springaop.MyAdvice"></bean>
是不是这个意思,这个配置能看懂,这个知识点就结了,这个配置首先前两个是绝对能看懂的,这个目标对象就是UserServiceImpl,就拿图上来,然后配置这个通知,这东西,然后目的是想跟Spring描述一下,我想通知织入到目标对象中,咱们跟Spring交流,不能跟他说话,我打算把咱们的通知,是不是织入到这个切入点当中,这个切入点是不是写的很清晰,哪个是我的目标对象呢,是在我这个包下,目标是ServieImpl的类,然后这个方法名的话,参数任意,返回值任意,说白了就是所有的方法,然后告诉他切点之后,那你就要说,myAdvice那这里是不是通知,那其中before方法,这是不是咱们的前置通知,然后前缀通知这个代码,这个是前置通知的内容,打算插入到哪去啊,这里是不是把插入点pc传入到这里了,是不是打算这个类,所有方法里面去,然后下面都是一样了,这表示一个后置通知,打算把这个增强到哪去呢,又是这个切点,然后依次类推,环绕通知,是不是也到这里面去,后置也增强进去,然后接下来的话,咱们只要配了这个以后,咱们再获得这个userService的时候,直接获得的就是什么对象,是不是代理对象,你只要配了这一段以后,只要你这个userService符合这个切点表达式,他就会对你这个userService产生代理,并且你直接获得userService是不是就是代理,就不用问怎么获得代理对象,只能获得代理了,只能获得代理之后的对象了,所以由此咱们的测试
<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd "><!-- 准备工作:导入(约束)aop的命名空间 --><!-- 1.配置目标对象 --><bean name="userService" class="com.learn.service.UserServiceImpl"></bean><!-- 2.配置通知对象 --><bean name="myAdvice" class="com.learn.d_springaop.MyAdvice"></bean><!-- 3.配置将通知织入目标对象 --><aop:config><!-- 配置切入点 public void com.learn.service.UserServiceImpl.save()void com.learn.service.UserServiceImpl.save()* com.learn.service.UserServiceImpl.save()* com.learn.service.UserServiceImpl.*()* com.learn.service.UserServiceImpl.*(..)* com.learn.service.*ServiceImpl.*(..)* com.learn.service..*ServiceImpl.*(..)--><aop:pointcut expression="execution(* com.learn.service.*ServiceImpl.*(..))" id="pc"/><aop:aspect ref="myAdvice"><!-- 指定名为before方法作为前置通知 --><aop:before method="before" pointcut-ref="pc" /><!-- 后置 --><aop:after-returning method="afterReturning" pointcut-ref="pc"/><!-- 环绕通知 --><aop:around method="around" pointcut-ref="pc"/><!-- 异常拦截通知 --><aop:after-throwing method="afterException" pointcut-ref="pc"/><!-- 后置 --><aop:after method="after" pointcut-ref="pc"/></aop:aspect></aop:config></beans>
前面咱们说过就是创建容器的,在这里就是把咱们的UserService通过名称取出来,就是这个方法,是不是service方法一执行,是不是就执行代理了,看明白啥意思了
package com.learn.d_springaop;import javax.annotation.Resource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.learn.service.UserService;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:com/learn/d_springaop/applicationContext.xml")
public class Demo {/*** 将名为userServiceTarget的对象注入到us变量中*/@Resource(name="userService")private UserService us;@Testpublic void fun1() {us.save();       }
}
你要说,就是这点事,把一个代码织入到一个目标对象当中,那你学的话就学通知,学目标对象就不用说,不用学都会,体现通知已经咱们的目标对象,以及配置产生代理,是不是就是这点事

spring的aop整理相关推荐

  1. 4、spring核心AOP

      Spring AOP 1. Spring AOP 概述 1-1 1.1. 何为AOP? 1-1 1.2. AOP要解决什么问题? 1-1 1.3. AOP实际项目应用场景? 1-2 1.4. AO ...

  2. [转载] Spring面试题整理

    参考链接: Java中的动态方法Dispatch和运行时多态 Spring面试题整理 2018年03月07日 21:11:46 hrbeuwhw 阅读数:49116 Spring 概述 1. 什么是s ...

  3. Spring.Net Aop

    Spring.Net 有四种通知: IMethodBeforeAdvice,IAfterReturningAdvice,IMethodInterceptor,IThrowsAdvice BeforeA ...

  4. [Spring 深度解析]第4章 Spring之AOP

    第4章 ◄Spring之AOP► 在上一章节中,我们大致了解了Spring核心容器,了解了IOC思想在Spring中的具体应用Bean容器以及Bean的配置与使用,这一章我们将开始学习AOP在Spri ...

  5. Spring对AOP的支持

     Spring对AOP的支持<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  6. Spring 容器AOP的实现原理——动态代理

    本文来自极客学院 Spring 容器AOP的实现原理--动态代理 之前写了一篇关于IOC的博客--<Spring容器IOC解析及简单实现>,今天再来聊聊AOP.大家都知道Spring的两大 ...

  7. Spring的AOP使用xml配置

    需要使用spring的包,大家自己全部导入进去即可.省4........ 用户管理接口 package com.rx.spring; public interface UserManager { pu ...

  8. 【SSM框架系列】Spring 的 AOP(面向切面编程)

    什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP 是 OOP ...

  9. Spring实现AOP的4种方式

    Spring实现AOP的4种方式 先了解AOP的相关术语: 1.通知(Advice): 通知定义了切面是什么以及何时使用.描述了切面要完成的工作和何时需要执行这个工作. 2.连接点(Joinpoint ...

最新文章

  1. Python字符串格式化f-string格式
  2. 如何使用 C# 扩展方法
  3. graphql 有必要吗_您准备好观看GraphQL了吗?
  4. python3自动化软件发布系统_基于python3做C/S端自动化测试可能用到的工具(不断更新中。。。。)...
  5. python txt 操作_python TXT文件操作
  6. 阶段3 2.Spring_07.银行转账案例_5 编写业务层和持久层事务控制代码并配置spring的ioc...
  7. 10个微型计算机应用的例子,微型计算机原理与接技术版简答题.doc
  8. 前程无忧解密 + 推送
  9. Star Way To Heaven 题解
  10. 仿今日头条后台管理系统(一)
  11. Magic Mouse 苹果鼠标移动速度改快的方法
  12. 常见前端面试题之盒子模型
  13. Linux入门学习(六)—— 怎么更改文件的所有者、所属组?以及怎么更改系统创建的默认权限?
  14. 什么软件测试电脑配置够玩什么游戏,怎么看电脑配置 怎么看电脑可以玩什么游戏...
  15. 完美解决iphone连电脑蓝牙出现bluetooth外围设备无法正确安装
  16. Python门面设计模式
  17. Ethercat学习笔记
  18. web界面文本框内部加按钮
  19. python安装报错_python安装失败报错
  20. 基数为N的集合X有多少个反对称的二元关系?【完整版全过程】

热门文章

  1. 什么是REST?以及RESTful的实现(转)
  2. ios LOL 英雄联盟 英雄头像展示
  3. SQLSERVER2005的安装目录结构(下)
  4. Android的Notification研究
  5. 单片机低功耗设计杂谈
  6. python闭包、装饰器
  7. WebIDE,让开发更简单
  8. 用c语言实现随机无向图的生成,C ++程序为给定数量的边生成随机无向图
  9. java9新特性 2017_Java 9 ← 2017,2019 → Java 13 ,来看看Java两年来的变化
  10. xyz后缀的网站_.XYZ五岁了