1.注解介绍 1.1注解的本质 Oracle官方对注解的定义为: Annotations, a form of metadata, provide data about a program that is not part of the program itself. Annotations have no direct effect on the operation of the code they annotate. 注解是元数据的一种形式,它提供有关程序的数据,该数据不属于程序本身. 注解…
一.概述 面向切面编程(AOP)是针对面向对象编程(OOP)的补充,可以非侵入式的为多个不具有继承关系的对象引入相同的公共行为例如日志.安全.事务.性能监控等等.SpringAOP允许将公共行为从业务逻辑中抽离出来,并将这些行为以一种非侵入的方式织入到所有需要的业务逻辑中,相较于OOP纵向模式的业务逻辑实现,其关注的方向是横向的切面. 从Spring2.0开始,引入AspectJ注释来对POJO进行标注,支持通过切点函数.逻辑运算符.通配符等高级功能来对切点进行灵活的定义,结合各种类型的通知来形…
在我们的实际开发中可能存在这么一种情况,当方法参数中的某些条件成立的时候,需要执行一些逻辑处理,比如输出日志.而这些代码可能都是差不多的,那么这个时候就可以结合自定义注解加上切面加上spel表达式进行处理.就比如在spring中我们可以使用@Cacheable(key="#xx")实现缓存,这个#xx就是一个spel表达式. 需求:我们需要将service层方法中方法的某个参数的值大于0.5的方法,输出方法执行日志.(需要了解一些spel表达式的语法) 实现步骤: 1.自定义一个注解L…
承接上一篇,注解应用于属性,本篇定义了一个用于方法的注解,结合Spring AOP 实现 切面编程. 以下demo演示使用了SpringBoot,与SSM中使用方式大致相同,效果如下: 1.自定义注解(用于方法) /** * 自定义注解 * @author Zx * */ @Target(ElementType.METHOD)//作用于方法 @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MethodAonn {…
1.首先实现AOP实例的第一步即声明切面类,两种方式(1.基于注解形式@Aspect,2.基于xml配置,一般都通过注解来声明切面类) 2.切入点表达式大致也有两种,一种是直接根据方法的签名来匹配各种方法@Pointcut("execution(xxxxxx表达式)"),另一种即标题的通过自定义注解的形式@Pointcut("@annotation(注解名)") 3.首先自定义注解 @Target({ElementType.METHOD}) @Retention(R…
java在jdk1.5中引入了注解,spring框架也正好把java注解发挥得淋漓尽致. 下面会讲解Spring中自定义注解的简单流程,其中会涉及到spring框架中的AOP(面向切面编程)相关概念. 不清楚java注解的,可以先了解java自定义注解:Java自定义注解 一.创建自定义注解 requestUrl 为我们自定义的一个参数 package com.sam.annotation; import java.lang.annotation.*; @Target(ElementType.M…
前言 1,在一些特定的场景我们往往需要看一下接口的入参,特别是跨系统的接口调用(下发,推送),这个时候的接口入参就很重要,我们保存入参入库,如果出问题就可以马上定位是上游还是下游的问题(方便扯皮) 2,还有一般需要在系统中看普通日志,还有特殊的异常(报错)日志,一般我们可以通过服务器去查看相应的位置,但是由于服务器是一直运行的,日志是一直在生成的,这个时候就不太方便. 3,保存入参,我们之间本地调试的时候就可以不用造数据,这个也是很方便的,只需改改就好. 这个时候就体现入参请求和相应结果的重要性…
一: spring-mvc.xml: <!--配置日志切面 start,必须与mvc配置在同一个配置文件,否则无法切入Controller层--><!-- 声明自动为spring容器中配置@aspectj切面的bean创建代理 ,织入切面 --><context:component-scan base-package="org.jeecgframework.core.aop" /><aop:aspectj-autoproxy /><…
使用Spring Aop注解的时候,如@Transactional, @Cacheable等注解一般需要在类方法第一个入口的地方加,不然不会生效. 如下面几种场景 1.Controller直接调用Service B方法:Controller > Service A 在Service A 上加@Transactional的时候可以正常实现AOP功能. 2.Controller调用Service A方法,A再调用B方法:Controller > Service A > Service B 在…
1.自定义注解2.编写 AOP3.测试 1.自定义注解 package com.base.yun.spring.aop; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotat…