首页 > 编程知识 正文

springboot jpa,Springboot核心注解

时间:2023-05-04 17:14:18 阅读:144271 作者:4366

最近,正在考虑使用过滤器、拦截器、aop

然后我写了APP。 定制了评论。 注释可以作用于方法以实现逻辑。 毕竟上了班就不行了。 没有进入切面。 最后我仔细学习发现了问题。 代码上当然有

pom//这里包有点多,其实很多都可以放弃,可以偷懒

properties Java.version 1.8/Java.version project.build.sourceencodingutf-8/project.build.sourceencodingproject project.reporting.outputencodingspring-boot .版本2.3.7.release/spring propertiesdependenciesdependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter-AOP/artifactiod dependencydependencygroupidorg.project lombok/groupidartifactidlombok/artifactidversion1. 18.20/versionscombok ependendersion groupidartifactidmybatis-plus/artifactidversion3.4.3.1/version/dependency-https://mvn存储库.com/artifact MySQL-connector-Java--从属冗馀组MySQL /组织冗馀组织8.0.25 /版本/从属groupidartifactidmybatis-plus-generator version/dependencydependencygroupidcom.Bao midou/groupidartifactidmybatis-pllous artifactidversion3. ependencydependencygroupidorg.freemarker/groupidartifactidfreemarker/artifactidfreeemarsion2.3. 31 /

groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>2.5.1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.31</version> </dependency>

首先自定义注解

package com.example.guolvqiaop.core;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;//METHOD--的就是这个注解可以作用在方法上//TYPE--的就是这个注解可以作用在方法上@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface Zidingyizhujie { String lanjie() default "";//这个根据你自己的逻辑写}

上切面类,这里我写的是示例是后置通知,就是接口执行完

package com.example.guolvqiaop.core;import com.alibaba.fastjson.JSON;import com.example.guolvqiaop.utils.IpUtils;import lombok.extern.log4j.Log4j2;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;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;/** * @Auther: bqdddd * @Date: 2021/9/22 18:56 * @Description: */@Aspect//表示切面类@Component@Log4j2public class SystemLogAspect { /*** * 注解 作用在类上要用 @within * 注解 作用在方法上要用 @annotation * @param joinPoint * @param o */ @AfterReturning(returning = "o",pointcut = "@within(com.example.guolvqiaop.core.Zidingyizhujie)") public void prinl(JoinPoint joinPoint,Object o){ //获取ip,IpUtils这是获取ip的工具类,自己在网上百度,或者看我以前作品都有 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); System.out.println("ip: "+IpUtils.getIP(request)); //获取具体的方法名 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); String name1 = signature.getMethod().getName(); System.out.println("方法名--"+name1); // 获取url String requestURI = request.getRequestURI(); System.out.println("url---"+requestURI); // 这也是获取返回值的一种方式 System.out.println("----接口的返回值----"+o); // 因为作用在类上,这个获取的类 String name = joinPoint.getTarget().getClass().getName(); System.out.println(" 类的相对路径: "+name); // 这也是获取值返回值的一种方式 Object[] args = joinPoint.getArgs(); if (args.length != 0){ String s = JSON.toJSONString(args[0]); System.out.println("-----------接口的返回值---------------"+s); } }}

最后最好在配置文件yaml加上配置,使用类带理

spring: aop: auto: true

问题的答案在切面的代码里面
希望看到这里的各位同仁
都可以在这条道路越走越好,有时间多多学习,吃不了学习的苦就得吃生活的苦。

==============================================
红衣少年 欲承先志 涉嫌通关 长梦未央!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。