给实体类使用该注解,结合后续的EXCEL工具类进行使用,能加快开发过程中关于文件导入的需求
文章目录
-
目录
前言
1. @Excel注解
2. @Annotation注解
3. @Retention注解
4. @Target注解
4. @Document注解
5.@Inherited注解
5.@RestController注解
6.@swagger注解(@API等相关的)
7.@Requestapping和@GetMapping和@PostMapping
8. Inherited修饰注解
9.RefreshScope注解
10.Value注解
11.@Autowired注解
12.发现很多注解都有这个require属性
13.valueof的优雅使用:
总结
前言
学习项目代码时遇到了很多没有见过的注解,在这里记录学习一下
1. @Excel注解
-
@Excel注解:该注解直接放在实体类属性中(注意需要生成get/set)方法,自动生成Excel导出数据时,将会自动生成设置表头中文名,同时它属于一个字典注解,主要作用是可以让一些数值型属性能自动转换字典值(注意需生成get/set)dictkey为字典key和实体类保持一致即可,dictExp则为转换值.
2. @Annotation注解
-
@Annotation是java5开始引入的新特性.中文名称一般叫做注解,它提供了一种安全的类似注释的机制,用来将审核的信息或者元数据与程序元素进行关联,更通俗的意思是为程序的元素加上更加直观更加明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供制定的工具或框架使用的. Annontation就像一种修饰符一样,应用于包,类型.构造方法,方法,成员变量,参数及本地变量的声明语句中.
-
注意:annotation是不会影响程序代码的执行的,无论annotation怎么变化,代码都始终如一的执行.
-
annotation和接口的异同
-
Annotation类型使用关键字@interface而不是interface这个关键字声明隐含了一个信息,它是继承了java.lang.annotation.Annotation接口,并非声明了一个interface
-
Annotation类型,方法定义是独特的,受限制的.
-
Annotation类型和接口的相似之处
-
-
-
Annotation的作用:给某个类,方法...添加了一个注解,这个环节仅仅是做了一个标记,但是对代码本身不会造成任何影响,需要后续环节配合,需要其他方法对该注解赋予业务逻辑.就如同我们在微信上发了一个共享定位,此时并没有什么用,只有当后面其他人都进入了这个共享定位,大家之间的距离才能明确,才知道怎么样聚在一起
-
应用场合:annotation一般作为一种辅助途径,应用在软件框架或工具
3. @Retention注解
- 作用:定义被它所注解的注解保留多久,一共有三种策略,定义的在RetentionPolicy枚举中
- 从注释了解Retention的三个声明周期分别对应于(java源文件.java文件)--->.class文件--->内存中的字节码
- source:注解只保留在源文件,当java文件编译侧还能class文件的时候,注解被遗弃;被编译器忽略
- class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的声明周期
- runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
- 选择合适的生命周期:首先要明确声明周期的长度SOURCE<CLASS<RUNTIME,所以前者能作用的地方后者一定也能作用.一般如果需要运行时去动态获取注解信息,那么只能用RUNTIME注解,如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如ButterKnife),那么就用CLASS注解;如果只是做一些检查性的操作,比如@Override和@SuppressWarnings,则可以选用SOURCE注解
- 因为注解涉及到反射,所以运行时的效率多少会受到影响,所以现在很多的开源项目使用的是编译时注解.
4. @Target注解
- 和Retention类似,都是限定注解的范围,一个限定时期范围,而这个限制作用范围
- @Target用来表示注解作用范围,超过这个作用范围,编译的时候就会报错
- @Target:注解的作用目标
- @Target(ElementType.Type)--接口,类,枚举,注解
- @Target(ElementType.FIELD)--字段,枚举的常量
- @Target(ElementType.METHOD)--方法
- @Target(ElementType.PARAMETER)--方法参数
- @Target(ElementType.CONSTRUCTOR)--构造函数
- @Target(ElementType.LOCAL_VARIABLE)--局部变量
- @Target(ElementType.ANNOTATION_TYPE)--注解
- @Target(ElementType.ANNOTATION_TYPE)--注解
- @Target(ElementType.PACKAGE)--包
4. @Document注解
- 说明该注解将被包含在javadoc中
5.@Inherited注解
- 说明子类可以继承父类中的该注解
5.@RestController注解
- 在Spring中@RestController的作用等同于@Controller + @ ResponseBody,所以想要理解@RsetController注解就要先了解@Controller和@ResponseBody注解.
- @Controller注解:在一个类上添加@Controller注解,表面了这个类是一个控制器类.代表这个类会被Spring接管,Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你idea控制器,需要在配置文件中声明组件扫描.但想要让这个类成为一个处理请求的处理器光有@Controller注解是不够的,它还需要进一步修炼才能成为一个处理器,
- 在spring容器中创建该类的实例,创建实例的方式有两种:
- <bean class="test.controller.MyController" /> 这种方式是在spring容器中注入单个bean,当项目比较大,控制器类比较多时,用这种方式想Spring容器中注入bean是非常的让人苦恼的一件事儿,索性有第二种方式.
- <context: component-scan base-scan= "test.controller" /> 这种方式会扫描制定包中的所有类,并生成相应的bean注入到spring容器中.使用这种方式当然能够极大提高我们的开发效率,但是有时候我们不想某一类型的类注入到spring容器中.这个时候第二种方式也可以解决.
- @ResquestMapping注解是用来映射请求的,即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上.当使用@RequestMapping标记控制类时,方法的请求地址是相对类的请求而言的;当没有使用@RequestMapping标记类时,方法的请求地址是绝对路径. @RequestMapping的地址可以是URL变量,并且通过@PathVariable注解获取作为方法的参数.也可以是通配符来筛选请求地址.
- @ResponseBody注解:@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径,格式的转换是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换.如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@RestContorller,而不用在每个方法中标注@ResponseBody,简化了开发过程
6.@swagger注解(@API等相关的)
- @Api(atgs="xxx模块说明") 作用在模块类上
- @ApiOperation("xxx接口说明") 作用在接口方法上
- @ApiModel("xxxPOJO说明") 作用在模型类上:如VO,BO
- @ApiModelProperty(value="xxx属性说明","hidden"=true) 作用在类方法和属性上,hidden设置为true可以隐藏该属性
- @ApiParam("xxx模块说明") 作用在参数,方法和字段上,类似@ApiModelProperty
7.@Requestapping和@GetMapping和@PostMapping
- @GetMapping就是@RequestMapping附加了get请求方法.也就是说@GetMapping就是一个只能用来处理http的get请求的注解,比较专一,只能干这一件事儿,而@RequestMapping可以处理多种http的请求,总的来说:@PostMapping@GetMapping,@PutMapping,@DeleteMapping等注释都可以用@RequestMapping代替,如果害怕在映射的时候出错,可以统一使用@ResquestMapping,当然这样写有弊端,全用的话不方便其他人对于代码的阅读,所以能分开尽量分开吧,养成良好的代码书写习惯
8. Inherited修饰注解
- 表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解
9.RefreshScope注解
- 它是spring cloud中的一个注解,用来实现Bean中属性的动态刷新
- @Scope是spring cloud提供的一种特殊的scope实现,用来实现配置和实例热加载.
10.Value注解
- 它的作用是通过注解将常量,配置文件中的值,其他bean的属性值注入到变量中,作为变量的初始值.
- 有两种使用方法
- @Value("${}") :可以获取对应属性文件中定义的属性值
- @Value("#{}") :表示SpEl表达式通常用来获取bean属性,或者调用bean的某个方法
11.@Autowired注解
- @Autowired表示某个属性是否需要进行依赖注入,一般是写在属性上,也可以写在方法上.
- 在Spring容器初始化的过程中,到了属性填充这一步,会给加了@Autowired的注解属性,自动赋值该注解是先根据类型去Spring容器中找出该类型所有的bean对象,如果找出多个则再根据属性的名字从多个中再确定一个,如果require属性为true,并且根据属性信息找不到对象,则直接抛异常
12.发现很多注解都有这个require属性
- 当它为true时,被标记的注解参数如果为null,那么就会抛出异常,也就是确保这个被注解的参数一定不为空
- 如果为false,则使用默认值.
13.valueof的优雅使用:
- valueof有点类似于工厂模式,它是一个静态方法,可以把对象转换为所需要的类型,例如integer.valueof("1005") new integer("1005").valueof可以转换字符,double,short,等等类型,同事Double Long等对象也有相应的valueof方法.
- Integer.valueof是用在Integer类上的,不应该用在integer对象上.这样就可以直接获取对象而不用再new了.可以减少对象的使用,毕竟我们很多时候只是临时用一下对象,然后立马就放弃了,直接new一个对象作为参数看上去比较累赘,而使用一个对象又没有什么意思.
- 而且使用valueof可以有效的预防空指针异常,tostring为空可能会导致空指针异常,因为它要求对象一定存在.
总结
提示:这里对文章进行总结:
例如:以上就是进行项目学习的内容,但是有些学习的博客我可能忘记写转载后续也找不到了,如果有雷同,欢迎提醒我,我后续补上
以下是学习转载的内容:
ExceExcel注解_@excel注解_AntiLiang的博客-CSDN博客Exce
Annotation理解及运用(详解) - 简书
@Retention注解作用_愿好的博客-CSDN博客
https://www.cnblogs.com/javaxubo/p/16862804.html
valueOf用法_霁月稳的博客-CSDN博客
@ApiModelProperty用法_WGH100817的博客-CSDN博客
注解02:@Api 注解说明_天黑请赶路的博客-CSDN博客