Spring中AOP切面编程学习笔记

注解方式实现aop我们主要分为如下几个步骤:
  1.在切面类(为切点服务的类)前用@Aspect注释修饰,声明为一个切面类。
  2.用@Pointcut注释声明一个切点,目的是为了告诉切面,谁是它的服务对象。(此注释修饰的方法的方法体为空,不需要写功能比如 public void say(){};就可以了,方法名可以被候命的具体服务功能所以引用,它可以被理解为切点对象的一个代理对象方法)
  3.在对应的方法前用对应的通知类型注释修饰,将对应的方法声明称一个切面功能,为了切点而服务
  4.在spring配置文件中开启aop注释自动代理。如:<aop:aspectj-autoproxy/>

通知注解类型如下:

 

切点方法:

 

package aopdemo;import org.springframework.stereotype.Component;/*** @author coco.xu* @Date 2019-03-25*/
@Component("sayName")
public class SayName {public void saying() {System.out.println("我是coco...(切点方法)");}
}

 

 切面类:

package aopdemo;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;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;/*** @author coco.xu* @Date 2019-03-25*//*** 注解方式声明aop* 1.用@Aspect注解将类声明为切面(如果用@Component("")注解注释为一个bean对象,那么就要在spring配置文件中开启注解扫描,* <context:component-scan base-package="aopdemo"/>* 否则要在spring配置文件中声明一个bean对象) * 2.在切面需要实现相应方法的前面加上相应的注释,也就是通知类型。* 3.此处有环绕通知,环绕通知方法一定要有ProceedingJoinPoint类型的参数传入,然后执行对应的proceed()方法,环绕才能实现。*/
@Component("annotationTest")
@Aspect
public class AnnotationTest {// 定义切点@Pointcut("execution(* *.saying(..))")public void sayings() {}/*** 前置通知(注解中的sayings()方法,其实就是上面定义pointcut切点注解所修饰的方法名,那只是个代理对象,不需要写具体方法,* 相当于xml声明切面的id名,如下,相当于id="embark",用于供其他通知类型引用)* <aop:config> <aop:aspect ref="mistrel"> <!-- 定义切点 -->* <aop:pointcut expression="execution(* *.saying(..))" id="embark"/> <!--* 声明前置通知 (在切点方法被执行前调用) -->* <aop:before method="beforSay" pointcut-ref="embark"/> <!-- 声明后置通知* (在切点方法被执行后调用) -->* <aop:after method="afterSay" pointcut-ref="embark"/> </aop:aspect>* </aop:config>*/@Before("sayings()")public void sayHello() {System.out.println("注解类型前置通知");}// 后置通知@After("sayings()")public void sayGoodbey() {System.out.println("注解类型后置通知");}// 环绕通知。注意要有ProceedingJoinPoint参数传入。@Around("sayings()")public void sayAround(ProceedingJoinPoint pjp) throws Throwable {System.out.println("注解类型环绕通知..环绕前");pjp.proceed();// 执行方法System.out.println("注解类型环绕通知..环绕后");}
}

 

 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: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.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="aopdemo"/><!-- 开启aop注解方式,此步骤不能少,这样java类中的aop注解才会生效 --><aop:aspectj-autoproxy/>
</beans>

 

测试类:

package aopdemo;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** * @author coco.xu* @Date 2019-03-25*/
public class AopTest {public static void main(String[] args) {ApplicationContext ac = new ClassPathXmlApplicationContext("aopdemo/beans.xml");SayName sn = (SayName) ac.getBean("sayName");sn.saying();}
}

 

执行测试类,执行结果如下:

 

转载于:https://www.cnblogs.com/cocoxu1992/p/10593154.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud的学习记录(1)

最近一段时间重新学习一边SpringCloud&#xff0c;这里简单记录一下。 我用的是IntelliJ IDEA开发工具, SpringBoot的版本是2.1.3.RELEASE。 1. 构建Maven项目 整个的SpringCloud的项目是在Maven项目中的&#xff0c;这个Maven只做容纳其他项目使用, 比如后面Fegin/Config/Zipk…

html5 拖拽上传文件时,屏蔽浏览器默认打开文件

参考&#xff1a; https://www.cnblogs.com/kingsm/p/9849339.html 转载于:https://www.cnblogs.com/cwxwdm/p/10605529.html

php求数组交集的自定义函数,php数组交集函数

在数学中的交集运算&#xff0c;大家在学习的时候还是比较轻松的。我们在php数组里&#xff0c;可以借助array_intersect()函数对两个数组求交集&#xff0c;最后得到一个想要的交集数据。在正式开始array_intersect()使用前&#xff0c;我们需要先对函数的概念、语法、参数、返…

2016 hctf fheap 题解

题目链接 https://github.com/zh-explorer/hctf2016-fheap 题目分析 题目功能只有 malloc 和 free 的功能&#xff0c;查看堆的布局&#xff1a; 全局指针没有置空&#xff0c;导致 uaf 和 double free 漏洞&#xff0c;两种都可以做&#xff0c;但是这题的重点是绕过 PIE。 do…

Docker: Jenkins里的pipeline编写基本技巧

Jenkins里&#xff0c;先新建一个pipeline项目 Pipeline Syntax 在Sample Step里选择需要的插件&#xff0c;如果不存在&#xff0c;就去系统管理&#xff0c;插件管理里&#xff0c;进行安装。 如果源码管理工具用的是git,就在下拉里选择git 如果源码管理用的是svn&#xff0c…

《解剖PetShop》系列之三

《解剖PetShop》系列之三 三、PetShop数据访问层之消息处理 在进行系统设计时&#xff0c;除了对安全、事务等问题给与足够的重视外&#xff0c;性能也是一个不可避免的问题所在&#xff0c;尤其是一个B/S结构的软件系统&#xff0c;必须充分地考虑访问量、数据流量、服务器负荷…

简单理解bash和常规操作

1. 什么是bash&#xff1f; Bash shell是一个命令解释器&#xff0c;它是操作系统的外壳程序&#xff0c;负责处理用户命令与操作系统内核之间的交互&#xff0c;当用户输入一个命令并执行时&#xff0c;shell会把命令解释并传递给内核&#xff0c;然后再把内核输出返回给用户&…

昨夜的雨图片

昨天趟着淹没到屁股的雨水回家的&#xff0c;今天才知道&#xff0c;这是一场非常可怕的暴雨.本来就吓的够戗,现在直接两腿发软&#xff0c;几欲要哭了。想想真是后怕. 朋友说&#xff0c;你可真大胆,那么大雨你也敢趟.其实不是胆大,而是我走着走着水没的越来越往上了.幸亏个子…

ASP如何限定中英文混合的文字输出字数?

1<%2字符串截取函数&#xff0c;用于信息标题 3strWord需要截取的字符串 4intByteLength显示的字节长度&#xff0c;1个汉字两个字节 5intPadDotAmount背截取后尾部补充点的个数 6字符串截取函数&#xff0c;用于信息标题 7Function FixString()Function FixString(ByVal st…

【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】

原文链接&#xff1a;传送门。 第十章节我们分析了索引的内部结构。有了这些关于索引结构的知识&#xff0c;我们便可以分析索引碎片了&#xff1a;其产生的原因&#xff0c;如何防止&#xff0c;以及何时可以不去关注它们。 一些背景知识 / 复习 以下知识对于理解索引碎片来说…

Maverick.Net介绍 (来自http://www.cnblogs.com/RicCC/archive/2006/09/17/506890.html)

Maverick.Net介绍 Maverick.Net是Java社区开源MVC Web框架Maverick的.Net版本&#xff0c;相关资料可以查看项目主页。不管Maverick.Net的是非好坏&#xff0c;了解一下它的思想还是不错的。下面的内容是对Maverick.Net整体做一个简单的介绍&#xff0c;以求能够从全局的角度了…

惊了!最通俗易懂的Djongo入门竟然在这里!

Django简介python下有多款不同的web框架&#xff0c;Django是最有代表行的一种。许多成功的网站和app都基于djanfo。django是一个开源的web应用框架&#xff0c;由python写成。django采用了MVC的软件设计模式&#xff0c;即模型M,视图V和控制器C。Django特点强大的数据库功能&a…

linux z是什么文件夹,Linux znew初学者命令实例教程

原标题&#xff1a;Linux znew初学者命令实例教程您是否知道Linux提供了一种将.Z文件重新压缩为.gz文件的方法&#xff1f; 是的&#xff0c;znew命令可以让你这样做。 在本教程中&#xff0c;我们将使用一些易于理解的示例讨论此命令行实用程序的基础知识。 但在我们这样做之前…

使用X.509数字证书加密解密实务(一)-- 证书的获得和管理

一、 获得证书... 21、 从CA获得... 22、 从windows2003证书服务中获得... 23、 使用makecert工具获得... 2二、 证书的保存... 21、 保存在证书存储区... 22、 以文件形式保存... 42.1. 带有私钥的证书... 42.2. …

JVM分析

在运行java进程是&#xff0c;可以通过jps命令查看进程PID&#xff0c;使用java的同居jmap命令可以得到jvm的dump文件&#xff1b; 在网上找了两种方式获取dump文件 获取JVM的dump文件的两种方式&#xff1a;转载来源https://www.cnblogs.com/liu-ke/p/6622350.html【流柯】 1.…

linux组类型,LINUX用户以及用户组

转载博文:https://blog.csdn.net/xietansheng/article/details/800446200、用户、组、文件权限 常用命令:类型举例用户who, whoami, su, useradd, userdel, passwd, usermod, /etc/passwd组groupadd, groupdel, groupmod, /etc/group文件chmod, chown, chgrp其他sudo, exitPS:1…