Spring AOP SpringBoot集成
上一篇文章《Spring AOP 面向切面编程入门》对AOP作了简要的介绍,包含一些专业术语的解释。
本文基于SpringBoot编写了一个简单的Spring AOPDemo。
maven依赖添加如下
<!--引入SpringBoot的Web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--引入AOP依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
package com.example.demo.aop; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @desc: 核心业务模块
* @author: CSH
**/
@RestController
@RequestMapping("/aopController")
public class AopController { @RequestMapping(value = "/Curry")
public void Curry(){
System.out.println("库里上场打球了!!");
} @RequestMapping(value = "/Harden")
public void Harden(){
System.out.println("哈登上场打球了!!");
} @RequestMapping(value = "/Antetokounmpo")
public void Antetokounmpo(){
System.out.println("字母哥上场打球了!!");
} @RequestMapping(value = "/Jokic")
public void Jokic(){
System.out.println("约基奇上场打球了!!");
} @RequestMapping(value = "/Durant/{point}")
public void Durant(@PathVariable("point") int point){
System.out.println("杜兰特上场打球了!!");
}
}
package com.example.demo.aop; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component; /**
* @desc: 经纪人切面
* @author: CSH
**/
@Aspect
@Component
public class BrokerAspect { /**
* 定义切入点,切入点为com.example.demo.aop.AopController中的所有函数
*通过@Pointcut注解声明频繁使用的切点表达式
*/
@Pointcut("execution(public * com.example.demo.aop.AopController.*(..)))")
public void BrokerAspect(){ } /**
* @description 在连接点执行之前执行的通知
*/
@Before("BrokerAspect()")
public void doBeforeGame(){
System.out.println("经纪人正在处理球星赛前事务!");
} /**
* @description 在连接点执行之后执行的通知(返回通知和异常通知的异常)
*/
@After("BrokerAspect()")
public void doAfterGame(){
System.out.println("经纪人为球星表现疯狂鼓掌!");
} /**
* @description 在连接点执行之后执行的通知(返回通知)
*/
@AfterReturning("BrokerAspect()")
public void doAfterReturningGame(){
System.out.println("返回通知:经纪人为球星表现疯狂鼓掌!");
} /**
* @description 在连接点执行之后执行的通知(异常通知)
*/
@AfterThrowing("BrokerAspect()")
public void doAfterThrowingGame(){
System.out.println("异常通知:球迷要求退票!");
}
}
aaarticlea/png;base64,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" alt="" />/**
* @description 使用环绕通知
*/
@Around("BrokerAspect()")
public void doAroundGame(ProceedingJoinPoint pjp) throws Throwable {
try{
System.out.println("经纪人正在处理球星赛前事务!");
pjp.proceed();
System.out.println("返回通知:经纪人为球星表现疯狂鼓掌!");
}
catch(Throwable e){
System.out.println("异常通知:球迷要求退票!");
}
}
package com.example.demo.aop; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; /**
* @desc:技术统计
* @author: CSH
**/
@Aspect
@Component
public class GameDataAspect {
/**
* 定义切入点,切入点为com.example.demo.aop.AopController中的所有函数
*通过@Pointcut注解声明频繁使用的切点表达式
*/
@Pointcut("execution(public * com.example.demo.aop.AopController.Durant(int)) && args(point))")
public void GameDataAspect(int point){ } /**
* @description 使用环绕通知
*/
@Around("GameDataAspect(point)")
public void doAroundGameData(ProceedingJoinPoint pjp,int point) throws Throwable {
try{
System.out.println("球星上场前热身!");
pjp.proceed();
System.out.println("球星本场得到" + point + "分" );
}
catch(Throwable e){
System.out.println("异常通知:球迷要求退票!");
}
}
}
Spring AOP SpringBoot集成的更多相关文章
- Spring5.0源码学习系列之Spring AOP简述
前言介绍 附录:Spring源码学习专栏 在前面章节的学习中,我们对Spring框架的IOC实现源码有了一定的了解,接着本文继续学习Springframework一个核心的技术点AOP技术. 在学习S ...
- SpringBoot集成Redis实现缓存处理(Spring AOP实现)
第一章 需求分析 计划在Team的开源项目里加入Redis实现缓存处理,因为业务功能已经实现了一部分,通过写Redis工具类,然后引用,改动量较大,而且不可以实现解耦合,所以想到了Spring框架的A ...
- 【spring-boot】spring aop 面向切面编程初接触--切点表达式
众所周知,spring最核心的两个功能是aop和ioc,即面向切面,控制反转.这里我们探讨一下如何使用spring aop. 1.何为aop aop全称Aspect Oriented Programm ...
- 【spring-boot】spring aop 面向切面编程初接触
众所周知,spring最核心的两个功能是aop和ioc,即面向切面,控制反转.这里我们探讨一下如何使用spring aop. 1.何为aop aop全称Aspect Oriented Programm ...
- Springboot集成Spring Batch
Spring官网 (https://spring.io/projects/spring-batch#overview)对Spring Batch的解释: 一个轻量级的.全面的批处理框架,用于开发对企 ...
- Spring-AOP SpringBoot自动配置和启动Spring AOP
SpringBoot 会使用 @Conditional* 注解来进行判断是否需要自动启动 AOP,如果 classpath 下有 spring-aop 的 jar 和有 EnableAspectJAu ...
- SpringBoot集成Spring Security入门体验
一.前言 Spring Security 和 Apache Shiro 都是安全框架,为Java应用程序提供身份认证和授权. 二者区别 Spring Security:重量级安全框架 Apache S ...
- springboot集成Spring Data JPA数据查询
1.JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.它的出现主要是为 ...
- SpringBoot系列之Spring Data Jpa集成教程
SpringBoot系列之Spring Data Jpa集成教程 Spring Data Jpa是属于Spring Data的一个子项目,Spring data项目是一款集成了很多数据操作的项目,其下 ...
随机推荐
- androidproject有红色叹号的解决方式
首先,查看SDK版本号,一般有两处.第一处是project.properties文件里的target=android-?改动成自己工程相应的SDK版本号.第二处是manifest文件里, androi ...
- uva 11468 - Substring(AC自己主动机+概率)
题目链接:uva 11468 - Substring 题目大意:给出一些字符和各自字符相应的选择概率.随机选择L次后得到一个长度为L的字符串,要求该字符串不包括随意一个子串的概率. 解题思路:构造AC ...
- addEventListener event
addEventListener 先看个例子: document.getElementById("myBtn").addEventListener("click&qu ...
- Arcgis Engine(ae)接口详解(5):IGeometry几何基础操作
//点操作~~~~~~~~~~~~~~~~~~~~~~~~~ //通过坐标生成点 IPoint point = new PointClass(); point.PutCoords(, ); //获取点 ...
- eclipse配置android
先在eclipse中安装ADT插件,install内点击add,name:ADT, URL:http://dl-ssl.google.com/android/eclipse/ 之后直接finish就好 ...
- Android Baseline小tip
转载请注明出处:http://blog.csdn.net/bbld_/article/details/40709353 Baseline Alignment
- xamarin.Android 实现横向滚动导航
经过一段时间的练习,自己也做了不少的demo和一些小项目,今天就把这些demo分享给大家,也当做笔记记录到自己的博客中. 这次给大家带来的是HorizontalScrollView实现横向滑动,参考博 ...
- 在线安装Ganglia3.6.0,nginx+php搭建gweb,绝对通过
环境:CentOS6.5 minimal 目标:安装Ganglia核心组件(gmond, gmetad, gmetric, gstat, libganglia).Ganglia web 准备 yum增 ...
- bootstrap中的less
一.如何加入变量 引入你的 .less 样式文件的时候要设置 rel 属性值为 “stylesheet/less”: 参考网站:http://www.bootcss.com/p/lesscss/ 1 ...
- Python学习笔记_Redis
一.Redis介绍 非关系型数据库:mongodb.redis redis数据全部是存在内存里面的. redis本身每秒支持30w次的读写,本身性能非常好, redis重启后,数据会消失,持久性不好, ...