当前位置: 首页 > news >正文

自贡建设监督质量网站商务网站建设教学视频教程

自贡建设监督质量网站,商务网站建设教学视频教程,网页游戏网站2345,泰安正规网站建设公司电话AOP不用多说,是spring框架的两大基石之一。SpEL是Spring Expression Language的缩写,意为Spring表达式语言,,其支持在运行时查询和操作对象图提供了更加丰富的功能,最特别的是方法调用与字符串模板功能。熟悉js的es6语…

         AOP不用多说,是spring框架的两大基石之一。SpEL是Spring Expression Language的缩写,意为Spring表达式语言,,其支持在运行时查询和操作对象图提供了更加丰富的功能,最特别的是方法调用与字符串模板功能。熟悉js的es6语法的小伙伴都知道,模板字符串,这个spel就类似js的模板字符串。

         本次代码主要是熟悉使用语法,并布对应实际的应场景。

一、自定义注解

@Target({ElementType.PARAMETER,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TestAopAnn {/*** spEL* @return*/String  spEL() default "";
}

二、自定义切面

@Aspect
@Component
public class TestAopAspect {private final static Logger LOGGER = LoggerFactory.getLogger(TestAopAspect.class);@Pointcut("@annotation(org.example.boot3.aop.TestAopAnn)")public void pointCut(){}@AfterReturning(value = "pointCut()",returning = "result")public   void  doAfter(JoinPoint joinPoint,Object result){Method method = getMethod(joinPoint);TestAopAnn annotation = method.getAnnotation(TestAopAnn.class);if(annotation!=null){LOGGER.info("TestAopAspect-->doAfter-------后置织入");/// 通过spel表达式获取到形参的中name的值String value =getValue(joinPoint, method, annotation.spEL());LOGGER.info("TestAopAspect-->doBefore-------value={}",value);/// 将name追加到返回的listtry {if(result!=null && result instanceof List){List  list = (List) result;list.add(value);}} catch (Exception e) {e.fillInStackTrace();}}}private   Method  getMethod(JoinPoint  joinPoint) {Signature signature = joinPoint.getSignature();MethodSignature methodSignature = (MethodSignature) signature;return methodSignature.getMethod();}/**解析spel*/private String  getValue(JoinPoint  joinPoint,  Method method,String elStr){StandardEvaluationContext context = new StandardEvaluationContext();DefaultParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer();/// 方法参数名称String[] parameterNames = parameterNameDiscoverer.getParameterNames(method);Assert.isTrue(parameterNames!=null,"参数列表不能为空");///方法参数值Object[] args = joinPoint.getArgs();for (int i = 0; i < parameterNames.length; i++) {context.setVariable(parameterNames[i],args[i]);}ExpressionParser parser = new SpelExpressionParser();Expression expression = parser.parseExpression(elStr);return (String) expression.getValue(context);}
}

三、测试接口

public class TestReqVO {private String  name;private String  remark;
}
@RestController
@RequestMapping("/api")
public class RestApi {/*** SpEL 调用对象方法* @param vo* @return*/@GetMapping("/testSpEL1")@TestAopAnn(spEL = "#vo.getName()")public List<String> getSpELList1(TestReqVO vo){String[] arr = { "C" ,"C++","JAVA","GoLang","Rust","Python"};return new ArrayList<>(Arrays.stream(arr).toList());}/*** SpEL 调用对象属性* @param vo* @return*/@GetMapping("/testSpEL2")@TestAopAnn(spEL = "#vo.name")public List<String> getSpELList2(TestReqVO vo){String[] arr = { "C" ,"C++","JAVA","GoLang","Rust","Python"};return  new ArrayList<>(Arrays.stream(arr).toList());}@GetMapping("/fluxList")public Flux<List<String>> getSpEL2(){String[] arr = { "C" ,"C++","JAVA","GoLang","Rust","Python"};ArrayList<String> list = new ArrayList<>(Arrays.asList(arr));return Flux.just(list);}}

​​​​​​​

http://www.yayakq.cn/news/495629/

相关文章:

  • 做单页网站的软件wordpress标签背景
  • 做预约的网站实木复合门网站建设价格
  • 北京网站设计公司兴田德润怎么样企业网站的建设步骤包括
  • app开发网站建设培训班各大网站热搜榜排名
  • 长春网站建设及推广宣城有做网站的公司吗
  • 网站建设公司推荐金石下拉网络台州黄岩住房和城乡建设网站
  • 网站开发工程师学什么区别自己建的网站也要注册域名吗
  • 滁州市工程建设网站哈尔滨建筑
  • 宜昌网站网站建设可以个人做单的猎头网站
  • 襄樊网站推广凡客诚品特色
  • 网站的动画效果代码东莞建设网站官网登录
  • 深圳网站建设注册淮安网站建设制作
  • 如何美化网站东莞网站制作 东莞企业网站制作
  • 为何要网站优化好的网站建设网站
  • 开发网站广州网站建设百灵鸟优化
  • 可以用手机做网站吗wordpress后台空白
  • 网站开发的技术意义vue is做的购物网站
  • 汉服网站怎么做塘沽网站开发
  • 廊坊网站搭建竹溪网站建设
  • 邹平做网站的公司有哪些南谯区城乡建设局网站
  • 济南网站建设优化公司长春快速建站模板
  • 丽水市建设监理协会网站在哪里福建莆田网站开发
  • 网站功能详细设计外贸网站建设智能建站
  • 东阳光门户平台提升seo排名
  • 临沂住房和城乡建设厅网站wordpress 分类文章置顶
  • 软文网站推广法国际机票搜索量大涨
  • 阜南做网站公司网络营销流程
  • 做软件营销网站怎么样定制设计网站公司
  • 男女生做羞羞网站查看公司信息的网站
  • 如何做凡客网站电影网站开发文档