Spring-boot 一些常用注解说明!
@SpringBootApplication
这个注解就是下面这一堆注解的组合,其中又一个注解就是ComponentScan,这个注解的作用是扫描及注入对应的bean。而默认的扫描路径是由@SpringBootApplication注释的类决定的。
比如一个Application.class的路径是com.xxx.web 那么ComponentScan扫描的路径就是com.xxx.web.*,所以Application.class这个文件的位置至关重要,它的位置关系着扫描路径,如果在com.xxx.service
中写了一个controller的话 那么该controller无法被扫描到,也就无法产生作用。
当然也可以手动定义地址,在Application.class中手动的在@SpringBootApplication注解下面加上@ComponentScan(basePackages={com.xxx.*})手动的配置需要扫描的地址也行。
个人偏向将Applicatio放在最外层的目录下,那么就能扫描到所有同级及子目录的文件了!!!
@Target({ java.lang.annotation.ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @org.springframework.context.annotation.ComponentScan.Filter(type = org.springframework.context.annotation.FilterType.CUSTOM, classes = { org.springframework.boot.context.TypeExcludeFilter.class }), @org.springframework.context.annotation.ComponentScan.Filter(type = org.springframework.context.annotation.FilterType.CUSTOM, classes = { AutoConfigurationExcludeFilter.class }) })
@RestController(作用范围·类):
它是@Controller+@ResponseBody 注解的组合,它的好处在于当你的Controller中只是想返回json,或者对应的数据到前端页面时,直接用该注解标注整个类,那么就没必要在每个RequestMapping方法上都逐一再加一个ResponseBody注解了。
但是它还有一个缺点,就是当你的Controller想返回一个具体页面时,比如return index.html 或者index.jsp, 那么使用RestController注解就会导致InternalResourceViewResolver视图解析的失效。即没办法返回到正确的页面,只能返回一个字符串index.jsp给页面。
所以@RestController和@Controller这2个注解没有谁好谁坏,如果项目是前后端分离,那么整个项目就可以使用@RestController来实现,如果项目包含前端资源的解析那么 要选择性的使用2种注解!
@Value
该注解就是在项目启动的时候,将属性的值从application.properties(这个是系统默认的properties文件)中注入到对应的属性上。以@value("${xxx.xxx.xx}")这样的方式!
如果想自己定义properties文件的话就需要用到@PropertySource(value="classpath:xxx.properties",encoding="utf-8")来配置额外的文件。
@Data : 注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法,说特别也没有很特别,可能有些人对一个类中大量的set,get方法不感冒的时候就可以用这个注解减少
代码量!!!!
@NoArgsConstructor : 生成一个无参数的构造方法。
@AllArgsContructor: 会生成一个包含所有变量,同时如果变量使用了NotNull 注释, 会进行是否为空的校验。