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

spring之使用Spring的AOP

文章目录

  • 前言
  • 一、准备工作
    • 1、添加相应的依赖
    • 2、添加相应的命名空间
    • 3、创建目标类
    • 4、创建切面
  • 二、使用AOP
    • 1.在切面类中编写增强代码以及切点表达式
    • 2、开启aspectj的自动代理
    • 3、测试类
    • 4、测试结果


前言

Spring对AOP的实现包括以下三种方式
1、Spring框架结合AspectJ框架实现的AOP,基于注解方式。
2、Spring框架结合AspectJ框架实现的AOP,基于XML方式。
3、Spring框架自己实现的AOP,基于XML配置方式
实际开发中,都是Spring+AspectJ来实现AOP


一、准备工作

1、添加相应的依赖

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.5.RELEASE</version></dependency></dependencies>

2、添加相应的命名空间

spring.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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>

3、创建目标类

UserService:

package com.powernode.spring.service;
import org.springframework.stereotype.Service;
@Service("userservice") //将这个类纳入spring容器管理
public class UserService { //目标类public void login(){ //目标方法System.out.println("系统正在进行身份认证....");}
}

4、创建切面

LogAspect:

package com.powernode.spring.service;import org.springframework.stereotype.Service;
@Aspect //切面类是需要@Aspect注解进行标注的
@Service("logAspect") //将这个类纳入spring容器管理
public class LogAspect { //切面//切面=通知(增强代码)+切点(方法)
}

将切面和目标类纳入spring容器管理,在spring.xml中需要进行组件扫描

    <context:component-scan base-package="com.powernode.spring.service"></context:component-scan>

二、使用AOP

1.在切面类中编写增强代码以及切点表达式

@Service("logAspect") //将这个类纳入spring容器管理
@Aspect //切面类是需要@Aspect注解进行标注的
public class LogAspect { //切面//切面=通知(增强代码)+切点(方法)//通知就是增强就是具体的要编写的代码//这里通知Advice 以方法的形式出现//@Before(切点表达式 确定在哪里进行切入)标注的方法就是一个前置通知,在目标类的目标方法执行之前执行@Before("execution(* com.powernode.spring.service.UserService.* (..))")public void beforeAdvice(){System.out.println("我是一个通知,我是一段增强代码……");}
}

2、开启aspectj的自动代理

<!--开启aspectj的自动代理--><!--spring容器在扫描类的时候查看该类上是否有@Aspect注解,如果有,给切入点表达式涉及的类的对象创建代理对象--><!--proxy-target-class = true 表示强制使用CGLib动态代理proxy-target-class = false 这是默认值 表示接口使用JDK动态代理--><aop:aspectj-autoproxy proxy-target-class="true" />

3、测试类

@Testpublic void testBefore(){ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");UserService userservice = (UserService) ac.getBean("userservice");userservice.login();}

4、测试结果

在这里插入图片描述


http://www.lryc.cn/news/13027.html

相关文章:

  • LeetCode LCP 66. 最小展台数量
  • 设计模式之模板方法模式
  • Python数据挖掘基础
  • Go基础-函数
  • AC的改进算法——TRPO、PPO
  • 【C++学习】list的使用及模拟实现
  • 动态规划专题精讲1
  • PPO(proximal policy optimization)算法
  • ElasticSearch基本使用
  • windows微软商店下载应用失败/下载故障的解决办法;如何在网页上下载微软商店的应用
  • MySQL进阶篇之InnoDB存储引擎
  • 商标侵权行为的种类有哪些
  • Similarity-Preserving KD(ICCV 2019)原理与代码解析
  • 在Linux和Windows上安装seata-1.6.0
  • 兼职任务平台收集(二)分享给有需要的朋友们
  • 目标检测三大数据格式VOC,YOLO,COCO的详细介绍
  • SpringBoot实现统一返回接口(除AOP)
  • ChatGpt - 基于人工智能检索进行论文写作
  • 实例三:MATLAB APP design-多项式函数拟合
  • springboot多种方式注入bean获取Bean
  • Markdown及其语法详细介绍(全面)
  • 在Linux和Windows上安装sentinel-1.8.5
  • 面试攻略,Java 基础面试 100 问(十)
  • Zero-shot(零次学习)简介
  • 51单片机简易电阻电感电容RLC测量仪仿真设计
  • [软件工程导论(第六版)]第6章 详细设计(课后习题详解)
  • 【2.19】算法题2:贪心算法、动态规划、分治
  • 【Redis】Redis 发布订阅通信模式 ( 发布订阅模式 | 订阅频道 | 发布消息 | 接收消息 )
  • VNCTF 2023复现
  • python基础知识有哪些需要背(记住是基础知识)我是初学者