当前位置: 首页 > news >正文

SpringAOP学习

面向切面编程,指导开发者如何组织程序结构

增强原始设计的功能

oop:面向对象编程

1.导入aop相关坐标,创建

<!--spring依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.10.RELEASE</version></dependency>
<!--spring-text依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.10.RELEASE</version></dependency>
 <!-- 导入切入点表达式依赖--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.4</version></dependency>
 <!-- 导入junit依赖 测试单元--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>

2.创建配置类进行Spring注解包扫描

package com.heima.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
//写入注解是spring的配置类
@Configuration
//扫描包
@ComponentScan("com.heima")
public class SpringConfig {}

3.定义业务接口与实现类

jisaunqi

package com.heima.service;public interface JiSuanQi {
//    加法int add(int a, int b);//    除法int div(int a, int b);}

jisuanqiimpl 

package com.heima.service.impl;import com.heima.service.JiSuanQi;public class JiSuanQiImpl implements JiSuanQi {@Overridepublic int add(int a, int b) {int r = a + b;return r;}@Overridepublic int div(int a, int b) {int r = a / b;return r;}
}

生成

 测试库

package com.heima.service.impl;import com.heima.config.SpringConfig;
import com.heima.service.JiSuanQi;
import junit.framework.TestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;//junit测试单元
//启动整合
@RunWith(SpringJUnit4ClassRunner.class)
//指定启动类
@ContextConfiguration(classes={SpringConfig.class})
public class JiSuanQiImplTest extends TestCase {@Autowiredprivate JiSuanQi jiSuanQi;@Testpublic void testAdd() {System.out.println(jiSuanQi.add(1, 2));}@Testpublic void testDiv() {System.out.println(jiSuanQi.div(4, 2));}
}

 运行测试

4.定义通知,制作通知方法

5.定义切入点表达式,配置切面

建立软件包

建立类

 

类中要写入注解被扫描,

通知方法有4种

1.前置通知

  //1.前置通知@Before("pt()")public void before(JoinPoint joinPoint) {System.out.println("参数为:"+ Arrays.toString(joinPoint.getArgs()));System.out.println("我要开始计算了...");}

2.后置通知

  //2.后置通知@After("pt()")public void after() {System.out.println("我结束计算了");}

3.返回通知

//returning="返回结果对象"@AfterReturning(value = "pt()",returning = "r")public void afterReturning( Object r) {System.out.println("结果为:"+r);}

4.异常通知

 //4.异常通知  捕获异常触发@AfterThrowing(value = "pt()",throwing = "e")public void afterThrowing(Throwable e) {System.out.println("计算出现异常"+e.getMessage());}

要在配置开启AOP功能

回到测试类里运行测试

 MyAdivice

package com.heima.advice;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;import java.sql.Array;
import java.util.Arrays;//通知类,写入注解
@Aspect
//被Spring容器扫描到,由于spring容器已写入扫描器
@Component
public class MyAdivice {//切点表达式 你想在哪个方法上切入//int是参数类型//com.heima.service.impl.JiSuanQiImpl.add:找到add方法//(int,int)两个参数 参数类型为int@Pointcut("execution(int com.heima.service.impl.JiSuanQiImpl.add(int,int))")public void pt() {}//通知方法//1.前置通知@Before("pt()")public void before(JoinPoint joinPoint) {System.out.println("参数为:"+ Arrays.toString(joinPoint.getArgs()));System.out.println("我要开始计算了...");}//2.后置通知@After("pt()")public void after() {System.out.println("我结束计算了");}//3.返回通知  获取返回结果后触发//returning="返回结果对象"@AfterReturning(value = "pt()",returning = "r")public void afterReturning( Object r) {System.out.println("结果为:"+r);}//4.异常通知  捕获异常触发@AfterThrowing(value = "pt()",throwing = "e")public void afterThrowing(Throwable e) {System.out.println("计算出现异常"+e.getMessage());}}

6.在配置类中开启aop功能

package com.heima.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;//写入注解是spring的配置类
@Configuration//开启AOP功能
@EnableAspectJAutoProxy
//扫描包
@ComponentScan("com.heima")
public class SpringConfig {}

简化

    //@Pointcut("execution(int com.heima.service.impl.JiSuanQiImpl.add(int,int))")简化//@Pointcut("execution(int com.heima.service.impl.JiSuanQiImpl.add(*,*))")返回类型可以是多个//@Pointcut("execution(int com.heima.service.impl.JiSuanQiImpl.add(..))")返回类型可以是多个//@Pointcut("execution(int com.heima.service.impl.JiSuanQiImpl.*(..))")这里*代表包里面所有方法都可以运行//@Pointcut("execution(* com..impl.*.*(..))")代表意思为包的类型com包下面的所有包和方法//@Pointcut("execution(* com..*.*(..))")简化结果

相关文章:

  • 企业微信群发工具:精准营销与高效沟通的新篇章
  • [云服务器15] 全网最全!手把手搭建discourse论坛,100%完成
  • Oracle Data Guard备库清理归档脚本
  • Linux递归找出目录下最近被修改文件(最近一段时间内被修改过的最新文件)(最近修改文件、最新文件、查找文件)(监控目录、监控mysql文件)
  • 完美无敌Oracle RMAN备份脚本
  • VBA解除Excel工作表保护
  • spring装配笔记
  • Matplotlib 使用 LaTeX 渲染图表中的文本、标题和数学公式
  • 【经验分享】自动化测试框架实战
  • 什么是IPv6
  • 解决pycharm中matplotlab画图不能显示中文的错误
  • SpirngBoot核心思想之一IOC
  • Mac通过ssh连接工具远程登录服务器( Royal TSX安装及使用)
  • 深度学习:(七)梯度下降法在神经网络中的应用
  • 基于微信小程序的旧衣回收系统
  • php的引用
  • [PHP内核探索]PHP中的哈希表
  • 10个最佳ES6特性 ES7与ES8的特性
  • Android单元测试 - 几个重要问题
  • CSS 提示工具(Tooltip)
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Joomla 2.x, 3.x useful code cheatsheet
  • PHP 7 修改了什么呢 -- 2
  • scrapy学习之路4(itemloder的使用)
  • vue自定义指令实现v-tap插件
  • Web标准制定过程
  • 从零搭建Koa2 Server
  • 大型网站性能监测、分析与优化常见问题QA
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 计算机常识 - 收藏集 - 掘金
  • 京东美团研发面经
  • 老板让我十分钟上手nx-admin
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何解决微信端直接跳WAP端
  • 试着探索高并发下的系统架构面貌
  • 小李飞刀:SQL题目刷起来!
  • 运行时添加log4j2的appender
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​马来语翻译中文去哪比较好?
  • ​批处理文件中的errorlevel用法
  • #git 问题failed to resolve head as a valid ref
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (SpringBoot)第七章:SpringBoot日志文件
  • (undone) MIT6.824 Lecture1 笔记
  • (附源码)ssm高校实验室 毕业设计 800008
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (算法)N皇后问题
  • (一)、python程序--模拟电脑鼠走迷宫
  • (源码分析)springsecurity认证授权
  • (转) 深度模型优化性能 调参