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

南通网站备案网站seo快速排名

南通网站备案,网站seo快速排名,app和网站开发人员工作职责,wordpress中文字体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/395829/

相关文章:

  • 网站开发成app信用网站建设意义
  • 产品 网站建设免费网站空间 推荐
  • 网站木马 代码企业网站的视频页如何做
  • 怎样才能被百度秒收录博爱seo排名优化培训
  • 建站资讯互联网建筑公司
  • 公司网站手机版模板wordpress custom fields
  • 网站里做个子网页怎么做优化设计六年级下册数学答案
  • 网站怎么才能吸引人景观设计公司名称
  • 申请收费网站空间网站建设公司如何生存
  • 建网站知识低调与华丽wordpress版
  • 网站建设廾金手指专业壹柒网络营销的多种形式和特点
  • asp网站转wap网站网络运营怎么学
  • 知名的食品行业网站开发wordpress恢复默认链接
  • 池州家居网站建设怎么样免费网络在线打电话
  • 视频变成网站怎么做邯郸市
  • 品牌建设成果镇江网站关键字优化公司
  • 做个人网站需要哪些跨境数据专线内部管理
  • 金融中介做网站需要企业做网站价格
  • 企业公司网站管理系统建设智能家居网站SWOT分析
  • 企业网站建设主要类型及选择腾讯网站建设推广
  • 京东建站模板wordpress nikkon
  • 网站模块图深圳做响应式网站制作
  • 盐亭做网站如何修改网站ico
  • 那些小网站是哪里人做的网站开发公用头部
  • 上海自建网站电脑网站建设方案
  • 涵江建设局网站司法网站建设运营情况
  • 做招聘网站没有数据wordpress制作游戏
  • 视频网站直播怎么做的论坛的网站开发项目
  • app开发与网站建设难度做网站优化就是发文章吗
  • 学院网站建设流程图沂水网站制作