Aop(面向切面编程)

aop中的横切关注点也就是说的通用模块,可以被模块化为特殊的类,这些类被称为切面,可以通过通过声明的方式定义这个功能要以何种方式在何处应用。

AOP术语:

通知(Advice):增强的功能,切面要完成的工作。

通知类型:

  前置

  后置

  返回

  异常

  环绕

连接点(Join point):是在程序执行过程中能够应用通知的所有点,是一个运行时用到的概念,连接点可以是调用方法时、抛出异常时等。

切点(Poincut):定义了通知被应用的具体位置,“何处”

切面(Aspect):通知和切点的集合,通知和切点共同定义了切面的全部内容——它是什么,何时在何处完成其功能。

引入(Introduction)

织入(Weaving)

spring提供了4种类型的aop支持    spring对aop的支持局限于方法拦截

基于代理的经典spring aop

纯pojo切面

@Aspectj注解驱动的切面

注入式Aspectj切面

Spring中AspectJ使用

  1 perform()作为切点

package com.springa.aop.concert;
//切点
public interface Performance {public void perform();
}

2 定义切面

package com.springa.aop.concert;
import org.aspectj.lang.annotation.*;
@Aspect
public class Audience {@Pointcut("execution(public * com.springa.aop.concert.Performance.perform(..))")public void performance(){}@Before("performance()")public void silenceCellPhones(){System.out.println("Silencing cell phones");}@Before("performance()")public void takeSeats(){System.out.println("Taking seata");}@AfterReturning("performance()")public void applause(){System.out.println("CALL CALL");}@AfterThrowing("execution(public * com.springa.aop.concert.Performance.perform(..))")public void demandRefund(){System.out.println("Demanding a refund");}
}

@Aspect  表明Audience不仅仅是一个Pojo,还是一个切面

如果是使用普通的javaconfig的话,需要使用@EnableAspectJAutoProxy启用自动代理。xml文件通过

<aop:aspectj-autoproxy />开启。

package com.springa.aop.concert;import com.springa.aop.aspect.Audience;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class ConcertConfig {@Beanpublic Audience audience(){return new Audience();}
}

上面是使用spring的代码,使用springboot参考下面:

在sprigboot中,在pom.xml中导入了依赖,默认是开启了aop,不需要@EnableAspectJAutoProxy注解

步骤1 不变,定义切面步骤中使用@Compoent注解,不使用配置类。

目录结构和上面的有所不同。完成了上面的可以进行测试了。

Git地址:https://github.com/hutaoying/springboot1/tree/master/aop    springboot代码实现

转载于:https://www.cnblogs.com/joan-HTY/p/10102817.html

Aop_AspectJ实现相关推荐

  1. 二十9天 月出冲击黑鸟 —Spring的AOP_AspectJ @annotation

    6月14日,阴转雨. "四面垂杨十里荷,向云何处最花多, 画楼南畔夕阳和.天气乍凉人寂寞, 光阴须得酒消磨,且来花里听笙歌." 面向切面的框架AspectJ邂逅Spring,不仅造 ...

最新文章

  1. Spark RDD创建操作
  2. 程序员获取编程灵感的10 种方式
  3. 【报告分享】2021年小红书美妆护肤洞察报告.pdf(附下载链接)
  4. socketserver模块使用方法
  5. php日程 增删改查,使用Fullcalendar管理日程事件(增删改查拖放)
  6. MySQL学习笔记:一道group by+group_concat解决的小问题
  7. ERStudio逆向工程生成ER模型
  8. 新萝卜家园 GhostXP SP3 电脑城装机版 V2011.07
  9. Ubuntu Linux红色警戒Read Alert官方开源版OpenRA安装笔记
  10. UC浏览器电脑版来了:用了有快感?
  11. SpringMvc国际化i18n
  12. python pdf与图片互转
  13. 修改服务器磁盘槽位编号,centos7 盘符变动 绑定槽位
  14. Android中收货地址管理Demo
  15. CTF 每日一题 Day44 rot
  16. 反反爬虫 大众点评-图片文字破解 2020年6月6日更新
  17. JQuery-样式篇
  18. 计算安全和无条件安全
  19. 基于SpringBoot框架的管理系统【完整项目源码】
  20. 测试u盘内存的软件,memtest86+-2.11内存测试、测速软件

热门文章

  1. ai二维码插件_超实用的AI脚本插件合集2.0免费分享,让你的设计快人一步
  2. 杭电计算机组成原理教材答案,杭电计算机组成原理包建课后作业答案详解.doc...
  3. linux进入文件夹后退,实验二Linux系统简单文件操作命令
  4. datatable java排序,JSF数据表(h:dataTable)DataModel排序数据
  5. 进入到一个新的产品,如何开展测试工作
  6. 编程之美4:求数组中的最大值和最小值
  7. 剑指offer面试题[17]-合并两个排序的链表
  8. 集成unittest与html测试报告
  9. mysql 无法创建用户_无法在MySQL 5.6中创建用户
  10. APP UI自动化测试:框架选择、环境搭建、脚本编写……全总结