AOP实现的三种方法 切入点 切入面
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实现的三种方法 切入点 切入面相关推荐
- 电脑文件夹剪切后如何找回来?分享三种方法
很多用户喜欢使用剪切操作对电脑中的文件进行移动,但是在剪切过程中往往容易出现数据丢失的问题,比如最近有位用户从电脑中剪切文件夹发送到移动硬盘后却丢失了,那么对于电脑文件夹剪切后如何恢复呢?下面小编为大 ...
- 获取cookie_抢券第一课:三种方法获取Cookie
现在分享京东抢券是不是不合适?毕竟还没有到双十一或者其他京东大促的时间. 记得以往京东还有那种神券299减200,399减300.基本上都是到点进行抢购,而且还不一定能抢到.不过今天先来分享获取Coo ...
- ps添加的阴影怎么去除_【PS摄影后期教程】去除阴影色块三种方法
点击蓝字关注这个神奇的公众号- 如何去除面部阴影色块 后期时模特面部有不均匀阴影色块 相信这个问题小伙伴们肯定都遇到过 不管是光的原因还是技术的问题 都是无可避免的 阴影有时候能帮助你调整视觉重心 或 ...
- html图层透明度,ps图层透明度怎么调整?Photoshop中调整图层透明度的三种方法介绍...
Photoshop里面怎么调整图层的透明度?作为一个"切图仔",切图的时候,看到总有透明的图层估计是最头痛的事,不知道其他人怎么样,个人却是最怕做透明的样式..扯远了,但确实因为要 ...
- 非计算机专业如何转行成为程序员?我用亲身经历教你用这三种方法
哈喽大家好啊!我想分享一下,非计算机专业的学生如何转行成为程序员.首先,我先介绍一下我的情况.我是18年毕业的,大学学的专业是土木工程,与计算机一点关系都没有.但是在大学时,我对程序员比较感兴趣.本来 ...
- java数据输入的步骤_Java学习日志1.4 Scanner 数据输入的三种方法
Scanner sc = new Scanner(System.in); /注意in 是InputStream的缩写,是字节输入流的意思. 整句话的含义就是: new 一个对象,接受从键盘输入的数据, ...
- RedHat 7.0及CentOS 7.0禁止Ping的三种方法
作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: "Ping"属于ICMP协议(即"Internet控制报文协议") ...
- 结构成员访问的三种方法
结构成员访问的三种方法 #include "stdio.h" #include "string.h" #include <stdlib.h> mai ...
- html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...
由于Android,IOS移动端的浏览器以及微信自带的浏览器为了用户更好的体验,规定不自动播放音频视频,默认屏蔽了autoplay,如果要想达到自动播放效果,需要单独处理,方法有以下几种: 第一种:添 ...
最新文章
- Java中jsonObject与String等互转问题
- 手动创建DataTable并绑定gridview
- tomcat(17)启动tomcat
- 《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】
- vs2013和vs2010的配置
- 小米员工爆料:Redmi K30 Pro自动亮度调节做得很好
- web2.0网站的四大特性简述
- TCMalloc小记【转】
- 虚拟机 linux 盘分小了,增加虚拟机硬盘分区大小
- ITIL 4 知识系列之服务目录
- [nssl1320][jzoj cz 2108] 买装备 {dfs}
- linux usb有线网卡驱动_linux系统下安装usb网卡驱动图文?
- 守望先锋代码_使用守望台自动刷新SQL Server容器
- IntelliJ Keymap
- 语文老师之二小白的边城
- 硬盘克隆大师Ghost 8.0技巧从入门到精通
- 利用easyui实现 菜单节点和选项卡的联动效果
- VS2005宏无法运行的问题(打了补丁MS14-009之后)
- 人生之路1.20代码 第一部分
- 「企业安全架构」EA874:信息安全架构