springboot2.0中怎么通过自定义注解获取方法返回值
发表于:2023-03-24 作者:安全数据网编辑
编辑最后更新 2023年03月24日,这篇文章将为大家详细讲解有关springboot2.0中怎么通过自定义注解获取方法返回值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。springbo
这篇文章将为大家详细讲解有关springboot2.0中怎么通过自定义注解获取方法返回值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
springboot2.0 自定义注解通过类或者方法切面并且获取方法的返回值
新增一个自定义注解
package com.example.demo.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Target;@Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE})public @interface TestA {}
新增一个切面,
package com.example.demo.Aspect;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;/** * @auth: xinhui * @date: **/@Slf4j@Aspect@Componentpublic class DemoAspect { @Pointcut("@within(com.example.demo.annotation.TestA)")//注解在类上的用 //@Pointcut("@annotation(com.example.demo.annotation.TestA)")//注解在方法上 public void addAdvice(){} @AfterReturning(returning = "rvl",pointcut="@within(com.example.demo.annotation.TestA)" )//注解在类上面//@AfterReturning(returning = "rvl",pointcut="@within(com.example.demo.annotation.TestA)" )//注解在方法上 public void afterReturn(JoinPoint joinPoint,Object rvl) throws ClassNotFoundException { Object[] args = joinPoint.getArgs();//参数 log.info("--------args:{}",args.length); log.info("============打印日志开始============"); log.info("target:{}",joinPoint.getTarget().getClass()); for(Object o:args) { log.info("参数:{}",o); } log.info("返回参数:{}",rvl); log.info("kind:{}",joinPoint.getKind()); String classType = joinPoint.getTarget().getClass().getName(); Class> clazz = Class.forName(classType); String clazzName = clazz.getName(); String methodName = joinPoint.getSignature().getName(); //获取方法名称 log.info("============打印日志结束============"); }}
新增一个service类
package com.example.demo.test;import com.example.demo.annotation.TestA;import com.example.demo.model.SayEntity;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;/** * @auth: xinhui * @date: 2019/10/8 8:52 下午 **/@Service("demoTest")@Slf4j@TestApublic class DemoTest {// @TestA public SayEntity say(String saystr,String origin) {log.info("say is start"); SayEntity say = new SayEntity(saystr, origin); return say; }}
新增controller信息
package com.example.demo;import com.example.demo.test.DemoTest;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.EnableAspectJAutoProxy;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@SpringBootApplication@RestController@EnableAspectJAutoProxy@ComponentScan(basePackages = {"com.example.demo"})public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Autowired DemoTest demoTest; @RequestMapping(value = "/demo/aop",method = RequestMethod.GET) public Object mapping(){ String say="say hello";String origin="origin"; return demoTest.say(say,origin); }}
打印日志的信息
2019-10-09 11:41:42.829 INFO 2264 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''2019-10-09 11:41:42.832 INFO 2264 --- [ restartedMain] com.example.demo.DemoApplication : Started DemoApplication in 2.331 seconds (JVM running for 3.133)2019-10-09 11:41:48.810 INFO 2264 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'2019-10-09 11:41:48.810 INFO 2264 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'2019-10-09 11:41:48.819 INFO 2264 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 9 ms2019-10-09 11:41:48.856 INFO 2264 --- [nio-8080-exec-1] com.example.demo.test.DemoTest : say is start2019-10-09 11:41:48.858 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : --------args:22019-10-09 11:41:48.859 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : ============打印日志开始============2019-10-09 11:41:48.859 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : target:class com.example.demo.test.DemoTest2019-10-09 11:41:48.859 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : 参数:say hello2019-10-09 11:41:48.859 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : 参数:origin2019-10-09 11:41:48.860 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : 返回参数:SayEntity(say=say hello, eat=origin)2019-10-09 11:41:48.860 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : kind:method-execution2019-10-09 11:41:48.861 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : ============打印日志结束============
关于springboot2.0中怎么通过自定义注解获取方法返回值就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
c语言网络技术和编程语言总结
c语言对应的三级考试网络技术
网站服务器后台如何加防护密码
c语言软件开发步骤
c语言中网络技术知识点
服务器对权限提升的防护措施
怎么在阿里云租服务器
黑苹果能做web服务器吗
c语言和网络技术哪个好考
云服务器2核4G是什么性能
爱康诺软件开发语言
高德订单显示服务器竟然出错
如何报考软件开发工程师
怎么申请一个网络安全公司
crm软件开发代码
防电信网络安全主题班会
计算机网络技术安全论坛
医疗器械的软件开发
我的世界服务器货币用途
查看服务器是否禁端口
数据库的最小的存储单位
数据库取值表单自动填充
数据库分级表查询
暑假推荐小游戏服务器
福州天亮网络技术有限公司网龙
iis服务器5.0
服务器电脑能装win7系统吗
西邮无线网络安全实验室
手机学数据库管理的app
网络安全意识培训的目标
湖南服务器生产
永劫无间与服务器断开连接
sql记录还原数据库
湛江金融软件开发哪家好
华中科技大学走出的互联网
区块链软件开发薪资待遇
平度微信小程序软件开发哪家好
hp服务器管理口日志
网络安全用语标题
江苏刀片服务器施工