Spring的AOP-AspectJ注解方式

目录

Spring的AOP-AspectJ注解方式

1.创建类,在类里面定义方法

2.创建增强类

3.进行通知的配置

(1)在Spring 配置文件中,开启直接扫描

(2)使用注解创建User 和 UserProxy 对象

(3)在增强类上面添加注解@Aspect

(4)在Spring 配置文件中开启生成代理对象

4.配置不同类型的通知

(1)在增强类的里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置

5.测试:

         全部进行测试:

         测试结果:

观察:

7.如果有多个增强类同时对一个方法进行增强,可以设置增强类的优先级

(1)在增强类上面添加注解@Order(数字类型值)

  结果:


Spring的AOP-AspectJ注解方式

(需要看上一章把xjar包都导入才可以执行以下)

1.创建类,在类里面定义方法

新建一个aop_annotation包

在aop_annotation包内新建一个User类

User类代码如下:

package com.lbj.spring5.aop_annotation;public class User {public void add(){System.out.println("add。。。");}
}

 

2.创建增强类

package com.lbj.spring5.aop_annotation;//增强的类
public class UserProxy {//前置通知public void before(){System.out.println("before");}
}

 

3.进行通知的配置

(1)在Spring 配置文件中,开启直接扫描

bean2.xml:

<?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/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!--开启注解扫描/开启组件扫描--><context:component-scan base-package="com.lbj.spring5.aop_annotation"></context:component-scan>
</beans>

 

(2)使用注解创建User 和 UserProxy 对象

一个是被增强的User类

一个是增强的UserProxy类

 

(3)在增强类上面添加注解@Aspect

 

(4)在Spring 配置文件中开启生成代理对象

 

 

4.配置不同类型的通知

(1)在增强类的里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置

package com.lbj.spring5.aop_annotation;import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;//增强的类
@Component
@Aspect   //生成代理对象
public class UserProxy {//前置通知//@Before注解表示作为前置通知@Before(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void before(){System.out.println("before");}
}

 

5.测试:

注意事项:当我们使用了maven搭建项目的时候,bean1.xml文件需要到resources文件里面才能被使用

测试代码:

package com.lbj.spring5.test;import com.lbj.spring5.aop_annotation.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestAop {@Testpublic void testAopAnnotation(){//加载配置文件ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");//得到对象,引入依赖User user = context.getBean("user", User.class);//调用对象的方法user.add();}
}

测试结果: 

 

全部进行测试:

package com.lbj.spring5.aop_annotation;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;//增强的类
@Component
@Aspect   //生成代理对象
public class UserProxy {//前置通知//@Before注解表示作为前置通知@Before(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void before(){System.out.println("before...");}//最终通知@After(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void after(){System.out.println("after...");}//后置通知、返回通知@AfterReturning(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void afterReturning(){System.out.println("afterReturning...");}//异常通知@AfterThrowing(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void afterThrowing(){System.out.println("afterThrowing...");}//环绕通知@Around(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{System.out.println("beforeAround...");//被增强的方法执行proceedingJoinPoint.proceed();System.out.println("afterAround...");}
}

测试类:

package com.lbj.spring5.test;import com.lbj.spring5.aop_annotation.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Created by 14811 on 2020/12/23.*/
public class TestAop {@Testpublic void testAopAnnotation(){//加载配置文件ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");//得到对象,引入依赖User user = context.getBean("user", User.class);//调用对象的方法user.add();}
}

 

测试结果:

 

 

手动测试异常类:

明显10/0 是异常的

package com.lbj.spring5.aop_annotation;import org.springframework.stereotype.Component;//被增强的类
@Component
public class User {public void add(){int i=10/0;System.out.println("add...");}
}

测试结果:

 

观察:

after不管有没有异常都会执行

afterReturning 只要出现异常就不会执行

 

6.相同的切入点抽取

作用是:把一些重复写的写成公共部分

 

进行方法调用即可

 

 

7.如果有多个增强类同时对一个方法进行增强,可以设置增强类的优先级

(1)在增强类上面添加注解@Order(数字类型值)

数字类型值:越小,优先等级越高

对比: 

 

结果:

 

 

8.完全注解开发:

(1)创建配置类,不需要创建xml配置文件

@Configuration

@ComponentScan(basePackages={''包路径''})

@EnableAspectJAutoProsy(proxyTargetClass=true)

public class ConfigAop{

}

 

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

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

相关文章

python turtle绘制柱状图_python绘制图形(Turtle模块)

用python的Turtle模块可以绘制很多精美的图形&#xff0c;下面简单介绍一下使用方法。 需要用到的工具有python&#xff0c;python 的安装这里就不再细说。自行搜索。 from turtle import * #引入turtle模块 color(red, yellow) #设置绘制的颜色和填充颜色 # 海龟设置 hideturt…

JdbcTemplate(概念和准备)

目录 1.什么是jdbcTemplate 2.使用前准备工作&#xff1a; &#xff08;1&#xff09;引入相关jar包 &#xff08;2&#xff09;在spring 配置文件配置数据库连接池​ &#xff08;3&#xff09;配置jdbcTemplate 对象&#xff0c;注入 DataSource &#xff08;4&#xf…

python shape函数_Python中的多态及抽象类

本书同名免费MOOC《Python编程基础及应用》在哔哩哔哩(B站)热播&#xff0c;作者带着你学。版权声明&#xff1a;本文内容引用自作者的图书《Python编程基础及应用》(高等教育出版社)。本文可以在互联网上转载传播&#xff0c;但必须包含文中的版权声明&#xff1b;本文不可以以…

JdbcTemplate(操作数据库-添加功能)

目录 JdbcTemplate&#xff08;操作数据库-添加功能&#xff09; 1.建立数据库表&#xff1a; 2.对应数据库创建实体类&#xff1a; 3.编写service 和 dao &#xff08;1&#xff09;在 dao 层进行数据库添加操作 &#xff08;2&#xff09;具体&#xff1a;调用jdbcTemp…

JdbcTemplate(操作数据库-修改和删除功能)

目录 JdbcTemplate&#xff08;操作数据库-删除功能&#xff09; 1.创建数据库 2.配置文件实现 3.创建实体类 4.创建dao层 5.创建service层 6.测试类 7.测试结果&#xff1a; JdbcTemplate&#xff08;操作数据库-删除功能&#xff09; 1.创建数据库 user_db数据库的t_…

单片机定时器实验两位倒计时秒表_51单片机基础与应用8天速成(三)

在讲授中断这一概念时&#xff0c;人们总是喜欢举洗衣服烧水的例子&#xff1a;话说&#xff0c;一天“你”独自在家&#xff0c;为了泡脚给自己烧上了一壶水&#xff0c;然后想着明天没有衣服穿了&#xff0c;就去阳台洗起了衣服。过了十几分钟&#xff0c;“你”在阳台洗着衣…

JdbcTemplate(操作数据库-查询返回值)

目录 JdbcTemplate&#xff08;操作数据库-查询返回值&#xff09; 1.创建数据库 2.创建实体类 3.创建dao层 4.创建service层 5.创建测试类&#xff1a; 6.xml配置 7.测试结果&#xff1a; 8.结构示意&#xff1a; JdbcTemplate&#xff08;操作数据库-查询返回值&…

c++opencv显示中文_OpenCV安装,配置和运行

今天小崔有个项目功能想用OpenCV软件库实现一下&#xff0c;就安装了OpenCV,在这里给大家分享一下安装过程。一.什么是OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量…

JdbcTemplate(操作数据库-查询返回对象、查询返回集合)

JdbcTemplate&#xff08;操作数据库-查询返回对象、查询返回集合&#xff09; 1.创建数据库 数据库中有三条记录&#xff0c;数据库名为user_db&#xff0c;数据库表为t_book 2.新建实体类&#xff1a; Book类中的每一个属性对应数据库中的一条记录 package org.example.sp…

机器学习如何计算特征的重要性_机器学习之特征工程

特征选择是特征工程中的一个子集&#xff0c;从所有的特征中&#xff0c;选择有意义的&#xff0c;对模型有帮助的特征&#xff0c;以避免将所有特征中对模型没作用的特征导入模型去训练&#xff0c;消耗不必要的计算资源。更正式地说&#xff0c;给定n个特征&#xff0c;我们搜…

白中英 计算机组成原理_计算机组成原理 第五版.立体化教材 白中英 大学教材...

目 录第1章 计算机系统概论第2章 运算方法和运算器第3章 多层次的存储器第4章 指令系统第5章 中央处理器第6章 总线系统第7章 外存与IO设备第8章 输入输出系统第9章 并行组织与结构关于我们大学生必备资源库为大学生提供网课答案、大学课后答案、软件安装、大学考试考证资源以及…

Spring事务操作-事务

目录 Spring事务操作-事务 1.什么是事务 &#xff08;1&#xff09;典型场景 2.事务的四个特性&#xff08;俗称ACID特性&#xff09; &#xff08;1&#xff09;原子性 &#xff08;2&#xff09;一致性 &#xff08;3&#xff09;隔离性 &#xff08;4&#xff09;持久性…

Spring事务操作-事务引入

目录 Spring事务操作-事务引入 1.模拟异常 2.测试异常 3.没有使用spring框架的时候异常该如何处理 4.使用spring框架的时候异常该如何处理 5.在spring 进行声明式事务管理&#xff0c;底层使用AOP 6.spring 事务管理API 7.事务操作&#xff08;注解声明式事务管理&…

在r中rowsums_用R进行数据分析-05

20-矩阵与数组一、矩阵的定义矩阵&#xff08;Matrix&#xff09;是一个按照长方阵列排列的复数或实数集。向量是一维的&#xff0c;而矩阵是二维的&#xff0c;需要有行和列。R中&#xff0c;矩阵是有维数的向量&#xff0c;但元素必须拥有相同的模式&#xff0c;此和向量一致…

JAVA入门级教学之(super的内存示意)

Super的原理&#xff1a; 代表的是当前对象this的父类型特征 如果类加载过程中&#xff0c;这个类有静态代码块&#xff0c;有静态变量&#xff0c;一律都会执行&#xff0c;系统会先分配空间 只要方法调用&#xff0c;就一定会进行方法压栈 new一个方法&#xff0c;其实是调用…

JAVA入门级教学之(猜数字测试)

一个类A有一个实例变量v&#xff0c;从键盘接受一个正整数作为实例变量v的初始值 另外再定义一个类B&#xff0c;对类A的实例变量v进行猜测 如果大了则提示大了 如果小了则提示小了 等于则提示测试成功 猜测数字比大小的测试&#xff1a; /*** author LBJ* version V1.0* P…

硬盘突然提示没有初始化_新硬盘的分区

★前言如果你添加了一个新硬盘到电脑上&#xff0c;但是它没有在文件管理器中出现&#xff0c;你可能需要为它分配一个盘符&#xff0c;或者对它进行初始化并分区才能使用。★警告在分区时&#xff0c;”删除磁盘分区“和”格式化“都会清空该分区的数据&#xff0c;请提前备份…

JAVA入门级教学之(简单的程序测试)

请定义一个交通工具(Vehicle)类 其中有属性&#xff1a; 速度speed 体积size 方法移动move() 设置速度setSpeed(int speed) 加速speedUp() 减速speedDown() 最后在测试类Vehicle中的main() 中实例化一个交通工具对象&#xff0c;并通过方法给它初始化speed&#xff0c…

linux怎样判断线程是否暂停_怎样判断股市是否会继续下跌?

之前和大家分享了如何判断大市是否会上涨&#xff0c;这篇文章我再分享下如何判断大市是否会继续下跌。我们对大市的判断原则仍采用&#xff1a;基于技术分析判断危险信号&#xff0c;结合市场消息坐实。基于上一篇文章的基础如何判断股市是否会上涨&#xff1f;是否已跌到底&a…

html鼠标悬停效果_【开发小技巧】023—如何使用HTML和CSS实现3D文字效果

来源 | https://www.geeksforgeeks.org/create-a-3d-text-effect-using-html-and-css/3D文字效果是网页设计领域中最常用的文字效果之一。作为设计师或前端开发人员&#xff0c;应该知道如何创建3D文字效果。今天&#xff0c;我们将研究一种最简单易用的方法来实现3D文字外观。…