美文网首页SpringBoot学习与总结
Spring4-Java8-参数名发现机制

Spring4-Java8-参数名发现机制

作者: 花绽放水流年 | 来源:发表于2016-08-26 11:14 被阅读130次

Java 8支持在编译后的代码中保留方法的参数名。这意味着Spring 4可以从方法中提取参数名,从而使SpringMVC代码更为简洁。例如:

@RequestMapping("/accounts/{id}")
public AccountgetAccount(@PathVariable("id") String id)
可以改写为:
@RequestMapping("/accounts/{id}")public Account getAccount(@PathVariable String id)

可以看到我们把@PathVariable(“id”) 替换成@PathVariable,因为Spring 4能从编译后的Java 8代码中获取参数名——id。只要在编译时指定了–parameters标记,Java 8编译器就会把参数名写入.class文件中。在Java 8发布之前,Spring也可以从使用-debug选项编译之后的代码中提取出参数名。

在Java 7及之前的版本中,-debug选项不会保留抽象方法的参数名。这会导致Spring Data这类基于Java接口自动生成其资源库实现的工程就会出现问题。比如接口如下:

interface CustomerRepository extends CrudRepository<Customer, Long> {
@Query("select c from Customer c where c.lastname = :lastname")
List<Customer> findByLastname(@Param("lastname") String lastname);}

我们能看到findByLastname仍然需要@Param(“lastname”),这是因为findByLastname是个抽象方法,而在Java 7及之前的版本里就算用了-debug选项也不会保留其参数名。而在Java 8中,使用–parameters选项后,Spring Data就能自动找到抽象方法的参数名,我们可以把上例中的接口改写成:

interface CustomerRepository extends CrudRepository<Customer, Long> {
@Query("select c from Customer c where c.lastname = :lastname")
List<Customer> findByLastname(String lastname);
}

这里我们已经不再需要@Param(“lastname”),让代码更简洁且易于阅读。所以使用Java 8编译代码时加上–parameters标记是个好方法。

相关文章

  • Spring4-Java8-参数名发现机制

    Java 8支持在编译后的代码中保留方法的参数名。这意味着Spring 4可以从方法中提取参数名,从而使Sprin...

  • JS函数

    一、声明函数 function 函数名 (){函数体} function 函数名 (形参1,形参2...){函数体...

  • C++函数指针、指针函数、引用函数

    函数指针的声明:返回类型 (*函数名) (形参); 指针函数的声明:返回类型 * 函数名 (形参); 引用函数的声...

  • 初学block(一)

    block语法:返回值类型 (^block名称)(参数名1 参数,参数名2 参数, ...) = ^(参数名1 参...

  • 颓废的学习

    定义def 函数名(形参)或者(*多个形参) 函数名(实参) 最近学习真是非常乱,看到什么,想学什么,才会动,这看...

  • 2019-03-05 如何理解js函数的重复声明与覆盖

    最近研究WKWebView的js调用OC的方法时,发现js的一个特性:JS函数只认识函数名,不管你入参和出参的个数...

  • 函数

    函数定义 格式 func 函数名(形参列表) -> 返回值 {代码实现} 调用 let result = 函数名(...

  • JS函数

    语法 function 函数名([形参列表]){执行代码}函数名([实参列表]) 函数定义 函数声明var x=a...

  • 函数,自定义函数,内置函数

    自定义函数 PHP中在同一个脚本,函数名不能重复;在js中可以有重复名function 函数名(形参1,形参2){...

  • 12.function

    一、定义函数 函数名(){函数体} function 函数名(){函数体} 例如 二、调用函数 无参函数调用方法 ...

网友评论

    本文标题:Spring4-Java8-参数名发现机制

    本文链接:https://www.haomeiwen.com/subject/flxzsttx.html