精华内容
下载资源
问答
  • /** * 获取操作类型说明(增加、删除、修改等) * @param joinPoint * @return * @throws Exception */ public static String getControllerMethodDescription(JoinPoint joinPoint) throws Exception {  ...
    /**
    * 获取操作类型说明(增加、删除、修改等)
    * @param joinPoint
    * @return
    * @throws Exception
    */
    public  static String getControllerMethodDescription(JoinPoint joinPoint)  throws Exception {
            String targetName = joinPoint.getTarget().getClass().getName();
            String methodName = joinPoint.getSignature().getName();
            Object[] arguments = joinPoint.getArgs();
            Class targetClass = Class.forName(targetName);
            Method[] methods = targetClass.getMethods();
            String description = "";
            for (Method method : methods) {
                if (method.getName().equals(methodName)) {
                    Class[] clazzs = method.getParameterTypes();

                    if (clazzs.length == arguments.length) {

                                    //UserOperate是我自定义的切面

                    UserOperate u = method.getAnnotation(UserOperate.class);
                    if(null != u){
                    description = u.option();
                    break;
                    }

                    }
                }
            }
            return description;

        }

    获取方法的注解内容时,method.getAnnotation(UserOperate.class)有时候为null,需要加判断,可以暂时解决这个问题。具体为什么有时候是null的原因,我还没有搞清楚。

    展开全文
  • aop切面 注解、参数获取方法

    万次阅读 2019-08-25 22:26:54
    在工作中会经常使用aop,这里将aop使用...1、定义需要切面的注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface AnnDemo { String value(); boolean isA...

    在工作中会经常使用aop,这里将aop使用基本方法,获取在切点中使用的获取参数、注解做一个样例。

    1、定义需要切面的注解

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface AnnDemo {
        String value();
        boolean isAop() default true;
    }
    
    

    2、在需要进行切面的方法标注注解

    @RestController
    @RequestMapping("/order")
    public class OrderController {
        @Autowired
        private OrderService orderService;
        @RequestMapping("/all")
        @AnnDemo(value = "all",isAop = false)
        public List<TbOrder> findAll() {
            List<TbOrder> list = orderService.getOrderList();
            return list;
        }
        @RequestMapping("/page")
        @AnnDemo(value = "page")
        public List<TbOrder> findPage(@RequestParam("username") String username) {
            List<TbOrder> listPage = orderService.getOrdersListPage();
            return listPage;
        }
    }
    
    

    3、定义切面。在切面中获取切点注解,方法,参数的获取

    @Aspect
    @Component
    public class AspectDemo {
        @Pointcut(value = "execution(* com.yin.freemakeradd.controller..*(..))")
        public void excetionMethod() {}
        @Pointcut(value = "execution(* com.yin.freemakeradd.controller..*(..)) && @annotation(AnnDemo)")
        public void excetionNote() { }
    
        @Before("excetionMethod()")
        public void testBefore(JoinPoint joinPoint) {
            System.out.println("----------------------------前置通知---");
            Object[] args = joinPoint.getArgs();
            for (Object arg : args) {
                System.out.println(arg);
            }
        }
    
        @Around(value = "execution(* com.yin.freemakeradd.controller..*(..)) && @annotation(AnnDemo)")
        public Object  testBeforeNote(ProceedingJoinPoint joinPoint) throws Throwable {
            //用的最多通知的签名
            Signature signature = joinPoint.getSignature();
            MethodSignature msg=(MethodSignature) signature;
            Object target = joinPoint.getTarget();
            //获取注解标注的方法
            Method method = target.getClass().getMethod(msg.getName(), msg.getParameterTypes());
            //通过方法获取注解
            AnnDemo annotation = method.getAnnotation(AnnDemo.class);
            Object proceed;
            //获取参数
            Object[] args = joinPoint.getArgs();
    
            System.out.println(annotation.value());
            System.out.println(annotation.isAop());
            for (Object arg : args) {
                System.out.println(arg);
            }
    
            if (Objects.isNull(annotation) || !annotation.isAop()) {
                System.out.println("无需处理");
                proceed = joinPoint.proceed();
            }else {
                System.out.println("进入aop判断");
                proceed = joinPoint.proceed();
                if(proceed instanceof List){
                    List proceedLst = (List) proceed;
                    if(!CollectionUtils.isEmpty(proceedLst)){
                        TbOrder tbOrder = new TbOrder();
                        tbOrder.setPaymentType("fffffffffffffffffff");
                        ArrayList<TbOrder> tbOrderLst = new ArrayList<>();
                        tbOrderLst.add(tbOrder);
                        return tbOrderLst;
                    }
                }
                System.out.println(proceed);
            }
    
            return proceed;
        }
    
    }
    
    展开全文
  • AOP切面导致获取不到注解

    千次阅读 2019-08-08 17:13:43
    在spring中可以使用 class.isAnnotationPresent 或者 class.getAnnotation 获取的注解,但是使用AOP代理了这个类后你会发现获取不到注解了。 解决方法:使用工具方法获取:AnnotationUtils.findAnnotation ...

    在spring中可以使用 class.isAnnotationPresent 或者 class.getAnnotation 获取类的注解,但是使用AOP代理了这个类后你会发现获取不到注解了。

    解决方法:使用工具方法获取:AnnotationUtils.findAnnotation

    展开全文
  • 1.什么是自定义注解,简单来说就是自己定义类似于实现 @RequestMapping这种注解的功能2.怎么实现自定义注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ...

    1.什么是自定义注解,简单来说就是自己定义的

    类似于实现 @RequestMapping这种注解的功能

    2.怎么实现自定义注解

    @Target(ElementType.METHOD)

    @Retention(RetentionPolicy.RUNTIME)

    @Documented

    public @interface FrontLog {

    String value() default “”;

    boolean ignore() default false;

    }

    自定义注解需要使用到元注解

    我这里定义的注解主要针对

    方法级别@Target(ElementType.METHOD)

    保留至运行时@Retention(RetentionPolicy.RUNTIME)

    AOP切面作用:AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统

    简单点,就是不改变原来的代码,实现一些统一的业务逻辑

    Springboot 怎么实现aop

    需要导入相应的切面包

    spring-boot-starter-aop

    一般的项目都有

    定义切面

    @Aspect

    @Component

    public class FrontLogAspect {

    然后定义切点

    这边我们的切点就不是对应的某个包下所有方法

    而是切到我们对应的自定义注解

    @Pointcut(“@annotation(xxxx.FrontLog)”)

    public void logPointCut() {

    }

    调用方法

    需要打印的方法前加个注解

    @FrontLog

    其实这个技术不是很难的,简单上手下就懂了

    我最讨厌嘴上说说而没有去实践的人了

    下面是我实现的真实demo

    有啥问题和想法,都可以交流交流,感觉有所帮助的同学,可以点个关注谢谢

    展开全文
  • @Pointcut("@annotation... public void doLog() { } @Around("doLog()") public Object doLogAround(ProceedingJoinPoint joinPoint) throws Throwable{ //目的:获取切入点方法上自定义RequiredLog注解
  • 1、自定义注解 @Retention(RetentionPolicy.RUNTIME) @Target(value=ElementType.METHOD) public @interface AdviceAnnotation { String name(); } 2、service层 public interface AdviceService { void study...
  • spring AOP切面,注解实现,获取参数

    万次阅读 2017-04-09 04:55:49
    SpringAOP有两种实现方式,一是通过xml配置,二是通过注解,为减少代码量提高可读性跟代码入侵本,若项目使用了spring框架,本人首选都是用注解去开发,方法很简单,只需要三步就可以搞定切面 一:在xml文件中开始...
  • 编码思想: 新增和修改数据,记录用户...需要声明每个模块名称及操作方法(constant包中便是声明模块和操作方法枚举) 文件目录: 1. build.gradle引入jar包 compile('org.springframework.boot:spring-boot-s
  • sping AOP切面注解使用中的坑–同一...写一个spring切面实现的注解来实现函数运行时间的监控看上去是一个比较直接的解决方案。     使用spring AOP实现方法运行时间的日志打印,其实比较简单: ...
  • 1编写注解项目包下增加一个annotation的package,增加一个自定义的注解,如MyLog,里面可以写上自定义的属性import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang....
  • 此处用是around切面的方式。首先,获取注解的方式有一种是直接上切点,如下: //定义切点Pointcut @Pointcut("execution(* com.biierg.pg.controller.*Controller.*(..))") public void excudeService() { }...
  • 注:原始学习资料来自于享学课堂 ...在对切面操作的时候,有时需要获取到被切面方法的参数以及执行结果等信息,具体使用发方法如下 @Aspect public class LogAspects { @Pointcut("execution(public int cn....
  • spring boot之自定义的注解切面编程

    千次阅读 2019-03-01 00:34:12
    可以通过注解来描述宿主的信息,可以通过拦截器为拥有特定的注解方法、域做特殊处理,可以用来做切面编程。 这也就是我们今天的重点,自定义的注解切面编程。通过简单的例子来看一下,我们可以通过注解来...
  • 1.注解简介 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入一种注释机制。 Java 语言中类、方法、变量、参数和包等都可以被...①使用切面方式使注解生效 项目结构: ├─.idea │ ├─codeStyles │ ├─
  • 基于切面,无缝切入 支持获取锁失败时行为,抛出异常还是继续等待,两种方式锁,一种等待重试,一种直接退出 源码地址:...
  • SpringAOP功能就是面向切面编程....切面织入: 将切面织入类的方法中,切面=通知+切点 通知类在该类中声明各自通知,每个通知+切点,都能组成一个切面public class MyAdvice { //前置通知 public void before() {
  • 重点难点整体思路:app_changelog 存放变更记录表自定义注解changeLog自定义注解FieldDescpojo类切面方法切面关键在于通过反射获取对应类、方法和属性、属性值 自定义注解 通过AOP切面的方式实现所有业务实力类...
  • 正文开始前,分享阿里 P8 资深架构师吐血总结 《Java 核心知识体系&面试资料.pdf》阿里 P8 级资深架构师吐血总结一份 Java 核心知识.pdf, 内容覆盖很广,Java 核心基础、Java 多线程、高并发、Spring、...
  • Spring注解版-面向切面

    2020-12-26 17:35:42
    使用@Aspect注解定义切面类, 使用@Before, @After, @AfterReturning, @AfterThrowing定义通知方法以及切点(可通过@Pointcut抽取公用切入点表达式), 通知方法上第一个参数(且只能是第一个参数)可以写上JoinPoint ...
  • 在Spring中一般使用@Aspect注解来定义一个切面,但是测试发现: @Aspect @Component public class IpWhiteListAspect { @Autowired private IpWhiteListConfig ipWhiteListConfig; 使用上述代码,运行时候...
  • Springboot AOP 提高代码开发效率 前文:最近和前端调试接口,...我们可以通过AOP @AfterReturning注解实现查看接口 返回参数内容 这里友情提示:post 请求返回是JSON格式 如果传fromDate格式,也就是 @RequeryP
  • 比如方法的注解,类上的注解,接口上的注解。 AOP的基本概念: 切面(Aspect) :通知和切入点共同组成了切面,时间、地点和要发生的“故事”。 连接点(Joinpoint) :程序能够应用通知的一个“时机”,这些...
  • 使用自定义注解,日志切面(前置通知 后置通知,获取controllererror执行结果),多线程 首先写个自定义注解 /** * 系统日志自定义注解 * * @author weijianxing */ @Target({ElementType.PARAMETER, Element...
  • 写一个切面类 自己定义了一个注解。然后想将注解写在controller层时 之前写的获取注解信息报出了null 我对比了2个执行流程发现原来是代理类错了 错误时候代理类是 而正常执行类是 解决办法,使用工具判斷...
  • 使用自定义注解标记controller,前端传参调用该controller时,使用切面捕获方法,对传递来参数添加createTime和createPerson(person从Session中获取),免去在每一个服务类中都要set这两个值 自定义注解 1....
  • 使用注解切面、反射,对前端传递参数,做统一空格(trim)处理 业务场景:由于目前前后端分离,在某些情况下,前端可能没有对传入后端字符串做出来,导致传递到后端数据可能有偏差,两端出现空格情况...
  • 由@After注解定义的方法会在 execution()表达式内的方法被调用之后执行,无论方法执行成功与否 由@AfterReturning注解定义的方法会在 execution()表达式内的方法被调用之后并成功返回结果后执行,若...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 198
精华内容 79
关键字:

切面获取方法的注解