1.AOP实现的原生方法spring的API接口

动态代理类似

SpringAPI接口实现类

public class BeforeLog implements MethodBeforeAdvice {/**** @param method 方法* @param args 参数* @param target 目标对象* @throws Throwable*/@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println("执行了"+target.getClass().getName()+"的"+method.getName()+"方法");}
}

spring配置文件的编写

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!--    注册bean到spring容器中--><bean id="UserImpl" class="service.UserImpl"/><bean id="BeforeLog" class="log.BeforeLog"/><aop:config>
<!--    添加切入点  execution(* service.UserImpl.*(..))表示切入到这个类的所有方法--><aop:pointcut id="pointcut" expression="execution(* service.UserImpl.*(..))"/>
<!--    设置切入的日志类  pointcut-ref切入到哪里 --><aop:advisor advice-ref="BeforeLog" pointcut-ref="pointcut"/></aop:config>
</beans>

接口和接口实现类的编写

package service;/*** @author:LeeGaki* @date:2022/1/13*/
public class UserImpl implements User{@Overridepublic void add() {System.out.println("add");}@Overridepublic void sel() {System.out.println("sel");}@Overridepublic void del() {System.out.println("del");}@Overridepublic void upd() {System.out.println("upd");}
}

测试类的编写

    @Testpublic void log(){ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//获取的返回值要是接口,获取的bean应该是实现类User userImpl = context.getBean("UserImpl", User.class);userImpl.add();}

2.AOP实现的第二种方法

自定义类(切面)的实现

配置文件中aop的配置

    <aop:config>
<!--        创建切入点 第一个*代表返回值类型 后面表示切入到这个类的所有方法--><aop:pointcut id="point" expression="execution(* service.UserImpl.*(..))"/>
<!--        ref后是自定义切面 也就是自定义的类--><aop:aspect ref="DiyLog">
<!--            切入到哪个方法的前还是后--><aop:before method="before" pointcut-ref="point"/><aop:after method="after" pointcut-ref="point"/></aop:aspect></aop:config>

自定义类(切面)

package log;/*** @author:LeeGaki* @date:2022/1/13*/
public class DiyLog {public void before(){System.out.println("====执行前========");}public void after(){System.out.println("====执行后========");}
}

测试类

    @Testpublic void log(){ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//获取的返回值要是接口,获取的bean应该是实现类User userImpl = context.getBean("UserImpl", User.class);userImpl.add();}

3.注解式实现aop

首先打开aop注解支持在配置文件中加入

<aop:aspectj-autoproxy/>

编写自定义类 添加注解

package log;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;/*** @author:LeeGaki* @date:2022/1/13*/
@Aspect
public class DiyLog {@Before("execution(* service.UserImpl.*(..))")public void before(){System.out.println("====执行前========");}@After("execution(* service.UserImpl.*(..))")public void after(){System.out.println("====执行后========");}@Around("execution(* service.UserImpl.*(..))")public void around(ProceedingJoinPoint pj) throws Throwable {System.out.println("环绕前");Object proceed = pj.proceed();System.out.println("环绕后");}
}

前后环绕都存在的时候实现的顺序是

环绕前
====执行前========
add
====执行后========
环绕后

AOP实现的三种方法 切入点 切入面相关推荐

  1. 电脑文件夹剪切后如何找回来?分享三种方法

    很多用户喜欢使用剪切操作对电脑中的文件进行移动,但是在剪切过程中往往容易出现数据丢失的问题,比如最近有位用户从电脑中剪切文件夹发送到移动硬盘后却丢失了,那么对于电脑文件夹剪切后如何恢复呢?下面小编为大 ...

  2. 获取cookie_抢券第一课:三种方法获取Cookie

    现在分享京东抢券是不是不合适?毕竟还没有到双十一或者其他京东大促的时间. 记得以往京东还有那种神券299减200,399减300.基本上都是到点进行抢购,而且还不一定能抢到.不过今天先来分享获取Coo ...

  3. ps添加的阴影怎么去除_【PS摄影后期教程】去除阴影色块三种方法

    点击蓝字关注这个神奇的公众号- 如何去除面部阴影色块 后期时模特面部有不均匀阴影色块 相信这个问题小伙伴们肯定都遇到过 不管是光的原因还是技术的问题 都是无可避免的 阴影有时候能帮助你调整视觉重心 或 ...

  4. html图层透明度,ps图层透明度怎么调整?Photoshop中调整图层透明度的三种方法介绍...

    Photoshop里面怎么调整图层的透明度?作为一个"切图仔",切图的时候,看到总有透明的图层估计是最头痛的事,不知道其他人怎么样,个人却是最怕做透明的样式..扯远了,但确实因为要 ...

  5. 非计算机专业如何转行成为程序员?我用亲身经历教你用这三种方法

    哈喽大家好啊!我想分享一下,非计算机专业的学生如何转行成为程序员.首先,我先介绍一下我的情况.我是18年毕业的,大学学的专业是土木工程,与计算机一点关系都没有.但是在大学时,我对程序员比较感兴趣.本来 ...

  6. java数据输入的步骤_Java学习日志1.4 Scanner 数据输入的三种方法

    Scanner sc = new Scanner(System.in); /注意in 是InputStream的缩写,是字节输入流的意思. 整句话的含义就是: new 一个对象,接受从键盘输入的数据, ...

  7. RedHat 7.0及CentOS 7.0禁止Ping的三种方法

    作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: "Ping"属于ICMP协议(即"Internet控制报文协议") ...

  8. 结构成员访问的三种方法

    结构成员访问的三种方法 #include "stdio.h" #include "string.h" #include <stdlib.h> mai ...

  9. html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...

    由于Android,IOS移动端的浏览器以及微信自带的浏览器为了用户更好的体验,规定不自动播放音频视频,默认屏蔽了autoplay,如果要想达到自动播放效果,需要单独处理,方法有以下几种: 第一种:添 ...

最新文章

  1. Java中jsonObject与String等互转问题
  2. 手动创建DataTable并绑定gridview
  3. tomcat(17)启动tomcat
  4. 《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】
  5. vs2013和vs2010的配置
  6. 小米员工爆料:Redmi K30 Pro自动亮度调节做得很好
  7. web2.0网站的四大特性简述
  8. TCMalloc小记【转】
  9. 虚拟机 linux 盘分小了,增加虚拟机硬盘分区大小
  10. ITIL 4 知识系列之服务目录
  11. [nssl1320][jzoj cz 2108] 买装备 {dfs}
  12. linux usb有线网卡驱动_linux系统下安装usb网卡驱动图文?
  13. 守望先锋代码_使用守望台自动刷新SQL Server容器
  14. IntelliJ Keymap
  15. 语文老师之二小白的边城
  16. 硬盘克隆大师Ghost 8.0技巧从入门到精通
  17. 利用easyui实现 菜单节点和选项卡的联动效果
  18. VS2005宏无法运行的问题(打了补丁MS14-009之后)
  19. 人生之路1.20代码 第一部分
  20. 「企业安全架构」EA874:信息安全架构

热门文章

  1. 【牛客题霸】语法篇 - C++入门72题
  2. 带一张阿拉旅游卡,随时出发
  3. 洛谷 JAVA 题解 P1618 三连击(升级版)
  4. java毕业生设计医院门诊分诊系统计算机源码+系统+mysql+调试部署+lw
  5. 如何铸造游戏中的NFT游戏角色
  6. 给计算机老师发一封信,写给老师的一封信作文500字
  7. 论“东数西算”对气象行业的影响
  8. 防抖和节流以及应用场景
  9. 当今书法行业如何转型线上?
  10. 从SPACE矩阵,看5G究竟是否在走向成功?