首页 > 编程语言 >Spring 04 SpringAOP 切面编程

Spring 04 SpringAOP 切面编程

时间:2023-09-25 11:11:47浏览次数:37  
标签:04 Spring void dao User SpringAOP org com public

Aop:面向切面,在不修改代码的前提下对方法进行增强

 pom.xml

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.16</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.4</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.20</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.2.3</version>
    </dependency>
  </dependencies>

切面类

package com.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Component  //将当前类交给Spring进行管理,作为普通的bean进行管理
@Aspect //将当前类告诉Spring作为切面类
public class UserAdvice {//切面类
   //@Pointcut("execution(public void com.dao.UserDao.*User(*))") //定义切入点
    @Pointcut("execution(* com.dao.*Dao.*User(..))") //定义切入点  返回值用*代替 类名方法名用通配符 多个参数用..代替
    public  void pt(){}

    @Before("pt()")  //前置通知
    public void addLog(){ //通知/增强  与切入点结合起来
        System.out.println("前置通知  添加日志功能");
    }
    @AfterReturning("pt()")
    public void afterReturning(){
        System.out.println("后置通知");
    }
    @After("pt()")
    public void after(){
        System.out.println("最终通知");
    }
    @AfterThrowing("pt()")
    public void afterThrowing(){
        System.out.println("异常抛出通知");
    }
    @Around("pt()")
    public void around(ProceedingJoinPoint point) throws Throwable{
        System.out.println("方法执行之前");
        point.proceed();//执行目标方法
        System.out.println("方法执行之后");
    }

}

/*
* //    @Pointcut("execution(public void com.dao.UserDao.insertUser(com.entity.User))") //定义切入点
//    @Pointcut("execution(void com.dao.UserDao.insertUser(com.entity.User))") //省略权限修饰符
//    @Pointcut("execution(* com.dao.UserDao.insertUser(com.entity.User))") //返回值使用*代替
//    @Pointcut("execution(* com..UserDao.insertUser(com.entity.User))") //多层包名使用 .. 代替,但是不推荐这么使用
//    @Pointcut("execution(* com.dao.*Dao.*User(com.entity.User))") //报包名写完整,类名和方法名使用通配符
//    @Pointcut("execution(* com.dao.*Dao.*User(*))") //参数列表使用*代替
//    @Pointcut("execution(* com.dao.*Service.*User(..))") //多个参数使用 .. 代替
    @Pointcut("execution(* com.dao.*Dao.*User(..))") //多个参数使用 .. 代替
 */
/*
*
    通知(增强)类型: 前置通知,后置通知,异常抛出通知,环绕通知, 最终通知
    try{
        前置通知
        环绕通知
        切入点
        环绕通知
        后置通知
    }catch(){
       异常抛出通知
    }finally{
       最终通知
    }
* */

SpringConfig

package com.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration//表示该类是Spring配置类,用于代替ApplicationContext.xml
@ComponentScan(value = {"com.aop","com.dao"})//包扫描
@EnableAspectJAutoProxy //开启注解形式的aop
public class SpringConfig {
}

dao层

import com.entity.User;


import java.util.List;

public interface UserDao {
    void insertUser(User user);
}

实现类

@Repository("userDao")
public class UserDaoImpl implements UserDao {

    @Override
    public void insertUser(User user) {
        System.out.println("添加用户");
    }
}

test

    @Test
    public void test(){
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserDao userDao = context.getBean(UserDao.class);
        userDao.insertUser(null);
    }

 

标签:04,Spring,void,dao,User,SpringAOP,org,com,public
From: https://www.cnblogs.com/oyww-2027/p/17727440.html

相关文章

  • MySQL实战实战系列 04 深入浅出索引(下)
    在上一篇文章中,我和你介绍了InnoDB索引的数据结构模型,今天我们再继续聊聊跟MySQL索引有关的概念。 在开始这篇文章之前,我们先来看一下这个问题: 在下面这个表T中,如果我执行select*fromTwherekbetween3and5,需要执行几次树的搜索操作,会扫描多少行? 下面是这......
  • springsecurity 6.x
    springboot+springsecurity6.x的配置securityConfig.java登录页面的DIY@BeanpublicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{http.authorizeHttpRequests(author->author.requestMatchers("/......
  • 【Redis】SpringBoot集成Redis事务-亲测
    大家好,我是mep。今天一起来探讨一下Redis缓存的问题,SpringBoot如何集成Redis网上文章很多,基本都是介绍如何配置redisTemplate,如何调用,本文就不过多介绍了。这次我们研究的是:Redis的事务。首先抛出一个问题,Redis支持事务吗?  答案肯定是支持,不然也不需要我们在这里探讨了。......
  • 【主流技术】MongoTemplate与Spring Boot项目集成分享(附CURD技巧)
    目录前言一、表结构特点1.1Json格式1.2实体映射二、条件构造2.1Criteria与Query的区别2.2简单条件2.3复杂条件三、如何选用接口3.1MongoRepository3.2MongoTemplate3.3两者对比四、常见API4.1增·insert4.2删·delete4.3改·update4.3.1update()与save()的区别4.3.2update......
  • Ubuntu18.04编译安装Ffmpeg6.0
    本文仅使用Ffmpeg来推RTSP流,其他用途请谨慎参考。1、安装基础库apt-getinstallyasmapt-getinstalllibsdl1.2-devapt-getinstalllibstdl2-devapt-getinstallbuild-essentialaptinstalllibspeex-dev2、安装pkg-configaptintallpkg-config设置环境变量(如果不知......
  • SpringBoot发送带文件的Post请求
    使用httpclient发送一个带文件参数的Post请求Pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apac......
  • spring boot错误之-Error (3, 32) java 程序包org springframework boot不存在
    问题:springboot错误之-Error(3,32)java程序包orgspringframeworkboot不存在用IDEA创建springboot,遇到上面的问题(我这里maven用的3.6.1版本)解决方法:在Settings里面,Maven路径和settings.xml要设置正确org.springframework.boot版本更改为2.1.0.RELEASE即可......
  • Vite+ts+springboot项目集成2
    项目集成集成element-plus官网地址:安装图标库pnpminstallelement-plus@element-plus/icons-vue入口文件main.ts全局安装element-plus,element-plus默认支持语言英语设置为中文importElementPlusfrom'element-plus';import'element-plus/dist/index.css'//@ts-ig......
  • 100048.美丽塔 2 - 364
    美丽塔2给你一个长度为n下标从0开始的整数数组maxHeights。你的任务是在坐标轴上建n座塔。第i座塔的下标为i,高度为heights[i]。如果以下条件满足,我们称这些塔是美丽的:1<=heights[i]<=maxHeights[i]heights是一个山状数组。如果存在下标i满足以下条......
  • springBoot结合springcloud alibaba
    版本对应很重要,很多问题都源于版本没有对应Q1:SpringCloud启动报错Didyouforgettoincludespring-cloud-starter-loadbalancerQ2:Nacos集群出现NacosException:Clientnotconnected,currentstatus:STARTINGQ3:配置中心不生效Q4:Errorcreatingbeanwithname‘configDataConte......