这篇文章将为大家详细讲解有关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
@Component
public 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
@TestA
public 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 ms
2019-10-09 11:41:48.856 INFO 2264 --- [nio-8080-exec-1] com.example.demo.test.DemoTest : say is start
2019-10-09 11:41:48.858 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : --------args:2
2019-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.DemoTest
2019-10-09 11:41:48.859 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : 参数:say hello
2019-10-09 11:41:48.859 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : 参数:origin
2019-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-execution
2019-10-09 11:41:48.861 INFO 2264 --- [nio-8080-exec-1] com.example.demo.Aspect.DemoAspect : ============打印日志结束============
关于springboot2.0中怎么通过自定义注解获取方法返回值就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/2270256/blog/3114707