首页 > 其他分享 >SpringBoot 自定义注解实现过程

SpringBoot 自定义注解实现过程

时间:2023-10-28 17:04:05浏览次数:37  
标签:SpringBoot 自定义 org boot springframework aspectj import 注解 annotation

1、新建SpringBoot-Test

 其中pom.xml 文件如下:

<?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 http://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.6.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.example</groupId>
    <artifactId>SpringBoot-Test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

2、设置启动端口:

SpringBoot 自定义注解实现过程_注解

3、自定义注解 MyAnotion

package com.springboot.annotation;

import java.lang.annotation.*;

@Target(ElementType.METHOD)//注解实现位置
@Retention(RetentionPolicy.RUNTIME)//元注解 运行时生效
@Documented
@Inherited
public @interface MyAnotion {
    String operation() default "";
}

4、自定义切面 MyAnnotationAspect

package com.springboot.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;


import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;

@Aspect //声明为切面类
@Component //扫描到容器中
public class MyAnnotationAspect {
    @Around(value = "@annotation(com.springboot.annotation.MyAnotion)")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        //方法参数
        Object[] joinPointArgs = joinPoint.getArgs();
        //方法名称 首先获取签名
        MethodSignature signature = (MethodSignature)joinPoint.getSignature();
        Method method = signature.getMethod();
        String methodName = method.toString();
        //获取方法上的注解
        //获取ip地址
        ServletRequestAttributes requestAttributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
        String ip = request.getRemoteAddr();
        //获取方法执行时间
        System.out.println("=======请求前=======");
        //执行方法
        joinPoint.proceed();
        System.out.println("=======请求后=======");
        return null;
    }
}

5、编写测试TestController,加上自定义注解 MyAnotion

package com.springboot.controller;

import com.springboot.annotation.MyAnotion;
import org.junit.Test;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "test")
public class TestController {
    @Test
    @MyAnotion
    @RequestMapping(value = "/demo")
    public void Demo(){
        System.out.println("请求成功!");
    }
}

6、编写测试接口 MyTestHttp.http

SpringBoot 自定义注解实现过程_注解_02

7、验证测试结果:

SpringBoot 自定义注解实现过程_java_03

上边就是简单的SpringBoot中自定义注解的实现过程:

其中代码结构为:

SpringBoot 自定义注解实现过程_注解_04



标签:SpringBoot,自定义,org,boot,springframework,aspectj,import,注解,annotation
From: https://blog.51cto.com/u_16304399/8072152

相关文章

  • 逆向招商银行模拟器app,自定义修改任何元素,详细教程
    我今天闲着没事,就从网上找来了一个破解版的招商银行模拟器,然后这个APP呢是破解版,我们在给它继续完善优化一下吧。 因为这个版本存在众多问题,打开后会提示出来一个作者附加的信息,我下面给大家截图。出现这种提示非常麻烦,我这边要弄的通过逆向的办法把这个提示直接删除掉或者......
  • 自定义中间件 middleware
    文件夹的创建1、在项目或者应用下创建一个任意名称的文件夹2、在该文件夹下创建一个任意名称的py文件3、在该py文件中写自定义的中间件(这个类必须继承MiddlewareMixin)然后在这个类里面就可以自定义五个方法了 (这五个方法并不是全部都需要书写,用几个写几个)中间件......
  • FreeSWITCH添加自定义endpoint之api及app开发
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9之前写过FreeSWITCH添加自定义endpoint的文章,今天整理下api及app开发的笔记。历史文章可参考如下链接:FreeSWITCH添加自定义endpointFreeSWITCH添加自定义endpoint之媒体交互一、常用函数介绍这里列举下开发过程中常用的函数。1......
  • c# winfom从0学习开发OA、BPM工作流程与自定义表单系统(十三)新建工作
     1,新建一个工作 2,填写表单 3,当时表单设置的可写字段,在这里就体现出来了,这里设置的第一个节点开始是字段全部可写的,其他节点只能看不能写 4,转交下一步工作,也就是我们流程图连线箭头指向的节点 5,确定转交下一步工作 6,需要登录张三的账号,去代办工作里查看有没有需......
  • 详解SpringBoot @Conditional相关条件注解
    Springboot条件注解是@ContionalXXX相关的注解,表示当特定条件有效时,被修饰的配置类或配置方法才会生效。条件注解可以用来修饰@Configuration类或@Bean方法等。主要有以下行为:当SpringBoot检测到类加载路径包含某个框架时,会自动配置该框架的基础Bean.只有当开发者没配置某......
  • 逆向手机银行余额修改生成器,实现自定义修改效果
    哈喽大家好,我又来了,我是专注于APP逆向的小库,我从网上找来了一款银行模拟器,就是装逼用的,然后它存在一个问题,就是每次打开那个余额固定死的,也没有其它修改的地方,而一些小伙伴想把这个余额改成自己想要的内容,这个软件我已经改好了,下面是软件的界面图。我这边主要教大家改这两处:教......
  • VUE+Ant 自定义cron组件,显示最近运行时间
    先上效果图 自定义组件<template><a-modaltitle="corn表达式":width="modalWidth":visible="visible":confirmLoading="confirmLoading"@ok="handleSubmit"@cancel="close"......
  • Fabric.js 使用自定义字体
    本文简介点赞+关注+收藏=学会了如果你使用Fabric.js做编辑类的产品,有可能需要给用户配置字体。这次就讲讲在Fabric.js中创建文本时怎么使用自定义字体、在项目运行时怎么修改字体、以及推荐一个精简字体库的工具。学习本文前,你必须有一点Fabric.js的基础,如果没......
  • Springboot+Mybatis+Mybatisplus 框架中增加自定义分页插件和sql 占位符修改插件
    一、Springboot简介springboot是当下最流行的web框架,SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,让这些框架集成在一起变得更加简单,简化了我......
  • @Resource注解
    @Resource注解是Java平台提供的注解,用于进行依赖注入。当你在类中的字段或属性上使用@Resource注解时,Java容器会自动为该字段或属性注入一个合适的Bean对象。@Resource注解可以标注在字段或属性的setter方法上。如果标注在字段上,则会自动注入与该字段类型相匹配的Bean对象。如果......