博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring aop
阅读量:5123 次
发布时间:2019-06-13

本文共 1967 字,大约阅读时间需要 6 分钟。

1 aop 术语

(1)连接点

  连接点就是考虑什么地方嵌入一个方法,比如说我现在有一个class A,A有一个方法叫login(),还有一个class B,B有一个方法叫record(),如果我们想要在A.login()方法执行前要先执行B.record()方法,那么我们直接给B.record()方法加一个Before注解就好了(下面解释),这里的在A.login方法执行前 里面的这个“执行前”就是连接点。

(2)切点

  切点就是一系列连接点的集合,我们接触过正则表达式,这里使用SqEL表达式来表达切点的集合,和正则表达式差不多,目的是选取合适的连接点。

(3)通知

  就是我们在我们想要执行的方法之前要执行的那个方法,就像例子中的B.record()

(4)切面

  切面就是通知和切点的集合,理解起来就好像一个通知的方法应用于好多连接点(切点),这两者加起来就是切面

(5)引入

  引入顾名思义是一个动作,就是将我们的切面应用到实际中,就叫做引入。

(6)目标

  目标就是被通知的对象,就好比Class A

(7)代理

  代理可以先理解为替代的意思,如果我们想执行A.login方法,但是我们又想在这个方法执行之前就去执行B.record()方法,但是我们没有更改A.login方法啊,也没有新建一个类啊,那么就用到了代理的概念,代理就好比我们想要执行A.login方法之前,Spring为我们新建了一个Class C,这个C中包含如下代码:

  public void execute(){

    B.record();

    A.Login();

  }

当然不是这么简单~但这个C就是一个代理

(8)织入

  spring 采用运行时织入,就是将切面和目标类的逻辑关系弄清楚~谁在谁前面执行,谁在后面执行,都规划好了,然后再运行程序。

2 Aop配置

(1)xml配置

  先说xml配置的话会直观一点,我们现在配置如下xml文件<?xml version="1.0" encoding="UTF-8"?>

     
       

上面的配置就是spring aop 的xml配置方法

(2) 注解配置

package com.demo.aop;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;@Aspect@Componentpublic class B {    @Pointcut("execution(public * com.demo.aop.A.login())")    private void prtPointCut(){
} @Before("prtPointCut()") public void beforePrt(){ System.out.println("before is loading..."); } @After("prtPointCut()") public void afterPrt(){ System.out.println("after is loading..."); }}

首先我们声明B为一个切面,并标注@Component注解。然后我们声明一个切点,我们给一个方法(prtPointCut())声明为切点之后,然后下面的@Before 或者 @After 注解都用的是这个方法的名字,有人也许会问到 这个prtPointCut方法中为什么没有代码,我去搜索过原因,但是可能心不诚。。没找到。。但是在这个方法中加入代码是不会执行的。具体原因我也想求教一下~这样一个简单的aop配置就结束了。

转载于:https://www.cnblogs.com/dqsBK/p/8350781.html

你可能感兴趣的文章
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>