首页 > 其他分享 >SpringBoot(10.1) -- AOP

SpringBoot(10.1) -- AOP

时间:2023-05-16 23:34:12浏览次数:36  
标签:10.1 SpringBoot -- boot System springframework import println org

SpringBoot的AOP的2种实现方式

  1. 基于SpringBoot的AOP写法

spring.aop.auto=true # 是否启用aop
spring.aop.proxy-target-class=false # false(默认)代理方式有接口使用jdk动态代理,true强制使用cglib代理。
  1. 基于SpringBoot做法 @EnableAopProxyClass

exposeProxy属性表示如果使用true就可以使用AopContext对象获取当前代理对象,false则不能使用
proxyTargetClass true表示使用jdk的动态代理, false表示使用cglib代理
 引入SpringBoot的AOP依赖spring-boot-starter-aop
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.11</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <groupId>com.mike.study</groupId>
  <artifactId>springboot-aop</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>springboot-aop</name>
  <description>Demo project for Spring Boot</description>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

  

第一种方式:Spring的AOP写法 类添加@Aspect注解,指定切入的方法点,然后就可以在@Before和@After的方法实现增强逻辑。 假设有个BookDaoImpl.java如下:
import org.springframework.stereotype.Repository;

/**
 * @Classname BookDaoImpl
 * @Created by Michael
 * @Date 2023/5/16
 * @Description Book操作类
 */

@Repository
public class BookDaoImpl implements BookDao {
  @Override
  public void readBook(String name, String authod) {
    System.out.println("书名:"+name+",作者:"+authod);
  }
}
  现在对readBook()方法增强,添加PointCut.java,定义切入点POINT_CUT ,这里是指定某个包下的所有类的所有方法,分别在方法的前后打印信息
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import org.aspectj.lang.annotation.Aspect;

import java.util.Arrays;

/**
 * @Classname PointCut
 * @Created by Michael
 * @Date 2023/5/16
 * @Description AOP增强类
 */
@Component
@Aspect
public class PointCut {
  // 定义切入点
  public static final String POINT_CUT = "execution(* com.mike.study.springbootaop.dao..*.*(..))";

  @Before(POINT_CUT)
  public void beforeReadBook(){
    System.out.println("+++++++++++++++++++++++");
    System.out.println("浏览目录");
    System.out.println("--------------");
  }

  @After(POINT_CUT)
  public void afterReadBook(JoinPoint jp){
    System.out.println("--------------");
    System.out.println("整理读书笔记");
    System.out.println(jp.getTarget());
    System.out.println("参数:"+ Arrays.asList(jp.getArgs()));
  }
}

调用readBook()

import com.mike.study.springbootaop.dao.BookDao;
import com.mike.study.springbootaop.dao.BookDaoImpl;
import com.mike.study.springbootaop.dao.BookDaoImpl2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import java.awt.print.Book;

@SpringBootApplication
public class SpringbootAopApplication {

  public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(SpringbootAopApplication.class, args);
    BookDao bookDao = context.getBean(BookDao.class);
    bookDao.readBook("《Java从入门到删库跑路》","不详");

    BookDaoImpl2 bookDao2 = context.getBean(BookDaoImpl2.class);
    bookDao2.readBook("《代码重构》","不详");
    context.close();
  }

}

查看输出结果

 

       

标签:10.1,SpringBoot,--,boot,System,springframework,import,println,org
From: https://www.cnblogs.com/lfhappy/p/17407224.html

相关文章

  • 开源AI聊天机器人MLC LLM发布 可用于多个平台
    目前大多数AI聊天机器人都需要连接到云端进行处理,即使可以本地运行的也配置要求极高。那么是否有轻量化的、无需联网的聊天机器人呢?一个名为MLCLLM的全新开源项目已在GitHub上线,完全本地运行无需联网,甚至集显老电脑、苹果iPhone手机都能运行。MLCLLM项目介绍称......
  • 开源AI聊天机器人MLC LLM发布 可用于多个平台
    目前大多数AI聊天机器人都需要连接到云端进行处理,即使可以本地运行的也配置要求极高。那么是否有轻量化的、无需联网的聊天机器人呢?一个名为MLCLLM的全新开源项目已在GitHub上线,完全本地运行无需联网,甚至集显老电脑、苹果iPhone手机都能运行。MLCLLM项目介绍称......
  • 开源AI聊天机器人MLC LLM发布 可用于多个平台
    目前大多数AI聊天机器人都需要连接到云端进行处理,即使可以本地运行的也配置要求极高。那么是否有轻量化的、无需联网的聊天机器人呢?一个名为MLCLLM的全新开源项目已在GitHub上线,完全本地运行无需联网,甚至集显老电脑、苹果iPhone手机都能运行。MLCLLM项目介绍称......
  • 【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Rest
    问题描述介绍了使用PythonSDK来获取AppService的访问限制信息,那么如何调用RESTAPI来实现呢? 问题解答如大家所知,Azure不管是SDK,门户UI,或者是PowerShell命令方式对Azure中资源进行操作,都是通过RESTAPI方式处理请求。所以,如果不知道当前操作使用的是一个接口时,最简单的方法是......
  • MYSQL因IN的范围太大导致索引失效问题
    背景最近发现有个用于统计的门店串码激活数量的SQL特别慢,将其摘出来大致如下SELECTa.sku_idasskuId,a.store_idasstoreId,count(*)assaleQtyFROMall_imei_infoawherea.activated_time>=1675530000000anda.activated_time<=1675616399999anda.stor......
  • 20230206今晚任务
    正则表达式https://www.codeleading.com/article/15211417139/https://www.yzktw.com.cn/post/70810.html优化过量的if...elsehttps://www.51cto.com/article/706255.htmlhttps://www.zhihu.com/question/344856665/answer/2481441325https://www.feiqueyun.cn/zixun/jishu/182481.......
  • 告诉你数据库的稳定性都在测试什么
    中国信通院给定的稳定性测试的思想如下:保障分布式数据库系统的稳定运行,就先要有测试其稳定性的工具和方法。混沌测试是一种新兴的对分布式系统的稳定性进行测试的技术。其主要思想是测试人员主动对系统引入故障,例如单个或多个节点的线程故障、网络故障、CPU高负载、内存占用满、硬......
  • mysql从5.7升级到8.0的注意事项
    ####################################(1)sql_mode全局变量:在升级MySQL版本到8.0的过程中,需要关注sql_mode参数默认值的变化,8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER(2)mysql_native_password插件:MySQL8.0.4开始,默认身份认证开始改变......
  • Oracle版面本的MySQL8.0的配置文件 my.cnf
    ##############################创建用户和用户组:groupaddworkuseraddwork  准备目录:mkdir-p/home/work/mysql_3306mkdir-p/home/work/mysql_3306/datamkdir-p/home/work/mysql_3306/etcmkdir-p/home/work/mysql_3306/tmpmkdir-p/home/work/mysql_3306/logmkd......
  • Blog-2
    前言:(总结之前所涉及到的知识点、题量、难度等情况)一,菜单四难度:菜单四是在菜单三的基础上迭代的,难度较大,因为要求有很多,这次大作业只要这一道题,但是也是要花费很长时间的一些知识点:类和对象:在代码中定义了几个类,如MenuItem(菜单项)、OrderItem(订单项)、TableOrder(桌子订单)和Tab......