JDK
- @FunctionalInterface : 该注解不是必须的,如果一个接口符合”函数式接口”定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
Spring
1.@import :Spring底层注解@import , 给容器中导入一个组件
2.@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合**@AutoWired** 默认通过类型(ByType)注入,如存在多个类型则通过名称注入
3.@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Resource 默认通过名称(ByName)注入 ,如名称无找到则通过类型注入
4.@Configuration 从Spring3.0
,@Configuration
用于定义配置类,可替换xml
配置文件,被注解的类内部包含有一个或多个被@Bean
注解的方法,这些方法将会被AnnotationConfigApplicationContext
或AnnotationConfigWebApplicationContext
类进行扫描,并用于构建bean
定义,初始化Spring
容器。 相当于加了这个注解,这个java类就变成了xml配置文件格式的作用
5.@Bean Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。 加了@Bean后就可以通过context上下文从容器中取出来。在运行springboot的时候会执行这个,常用于写配置里面,为了去自定义配置。
6.@AliasFor() 如@Controller,@Service,@Repository都继承了@Component的功能 (加入到电脑笔记中,加了后删除这个)
他们的基本作用和@Component完全一样都是标明某个类是
Spring的Bean,需要Spring容器进行管理。不同之处在于对Spring bean进行了归类,从而能对不同类型的Bean进行不同的处理。
1.@AliasFor是一个注解,用于为注解属性声明别名。 2.查看@service注解:@AliasFor(annotation = Component.class),表示继承注解?
7.@Lazy: 两个service,互相注入的时候,在其中一个service里面添加构造器,并加上@Lazy注解 即可实现延迟加载,主要用来解决service循环依赖的问题。CSDN-七国的天下,我要九十九-Spring中@Lazy注解的使用
SpringMVC
1.@NonNull 告诉编译器,参数非空
2.@RequestMapping(“/HelloController”) 用这个就会直接返回rest风格的json字符串 原来这才是根本!!!注解用于映射url到控制器类或一个特定的处理程序方法。
可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
3.@RestController 修饰的类会将 return后面的内容字符串的形式返回到@Requestmapping的页面(就不会出现乱码的问题,且也不会走视图解析器)
4.@Controller 修饰的类会将return的字符串配合视图解析器InternalResourceViewResolver添加上前缀和后缀。跳转到对应的html页面。
@Controller和@ResponseBody配合作用和@RestController一样
5.@ResponseBody 将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,
通常用来返回JSON数据或者是XML数据。https://blog.csdn.net/originations/article/details/89492884?spm=1001.2014.3001.5501,
在SpringMVC中就不会走视图解析器,直接返回数据,哦哦,原来是这样。
6.@component 是spring中的一个注解,它的作用就是实现bean的注入
7.@RequestParam 将请求参数绑定到你控制器的方法参数上 如果设置的参数名不一致、postman需要传@RequestParam中的变量名称
8.@Service 相当于applicationContext.xml配置文件中配置的,
表示给当前类命名一个别名,方便注入到其他需要用到的类中 主要是加了注解就不用继续去配置了 https://blog.csdn.net/jiangyupeng/article/details/84915426
9.@Qualifier 当一个接口有多个实现类的时候,为了指名具体调用哪个类的实现,相当于指定一个名字进行区分**
@Autowired使用@Qualifier相当于增加了byName寻找bean的功能吧?
10.@Autowired只按照byType 注入;@Resource默认先按byName自动注入,然后才按byType 注入;
https://blog.51cto.com/qiangmzsx/1359952
11.@Param MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。
在注释中的@Param,不仅是在注释中更好的看参数,还能在debug模式的时候直接查看到对应的参数!!!)
@PathVariable 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。
@RequestMapping("/del/{bookId}")
public String deleteBook(@PathVariable("bookId") int id) {
}
12.@RequestHeader用于将请求的头信息数据映射到功能处理方法的参数上。
SpringBoot
1.@ComponentScan 告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器(又说是IOC容器?)。例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。
2.@SpringBootApplication标注在某个类上说明这个类是SpringBoot的主配置类 , SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
3.@SpringBootConfigurationSpringBoot的配置类 ,标注在某个类上 , 表示这是一个SpringBoot的配置类;
4.@EnableAutoConfiguration****开启自动配置功能 使使用 @ConfigurationProperties 注解的类生效。
5.@AutoConfigurationPackage : 自动配置包
6.@Value,写在参数或者方法上面,配合**@component** 可以实现跟yaml文件的互动,例如@Value(“${ }”) @Value和@configurationProperties的区别:@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
7.@configurationProperties:默认从全局配置文件中获取值;
8.@PropertySource:加载指定的配置文件;
9.@validated:用来校验数据
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) 验证字符串长度是否在给定的范围之内
10.JSON相关
(1)@JsonProperty JsonProperty作用于序列化或者反序列化时,映射的属性的名字,可以放在get方法,set方法,属性上,都可以。 fasterxml中的注解
@JsonProperty(value = "fullName")
private String name;
//序列化之后: {"fullName":"zhangsan"}
@JsonProperty(access = JsonProperty.Access.READ_ONLY) 只能序列化,不能反序列化。
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 仅做反序列化操作 序列化的时候就看不到这个字段
(2)@JsonView 过滤序列化对象的字段属性,可以用来定义返回相同的Json的时候,过滤掉哪些属性https://blog.csdn.net/Dongguabai/article/details/80884774
11.@ControllerAdvice和@RestControllerAdvice 对加了@Controller注解的方法进行拦截处理,常用于统一异常处理。
12.@Async 是spring为了方便开发人员进行异步调用的出现的,在方法上加入这个注解,spring会从线程池中获取一个新的线程来执行方法,实现异步调用
13.@EnableAsync 表示开启对异步任务的支持,可以放在springboot的启动类上,也可以放在自定义线程池的配置类上,常放在自定义线程池配置类上。
14.@Cacheable Spring Cache 是作用在方法上的,其核心思想是,当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存在缓存中。 相关介绍
15.@Select 可以直接在接口上面加SQL语句,一般在放在MybaitsPlus结构里面的mapper层
16.@Profile(“dev”) 加在容器上,可以控制这个容器再哪个环境才运行
17.@ConditionalOnMissingBean 当需要某个 Bean 的实例时,如果容器中不存在该 Bean 的实例,则根据条件创建一个新的 Bean 实例。如果容器中已经存在某个 Bean 的实例,那么不会再创建一个新的 Bean 实例,而是直接使用已经存在的 Bean。
SpringSecurity
1.@EnableResourceServer @EnableResourceServer是为OAuth2资源服务器提供方便的注释,启用Spring Security 过滤器,通过传入的OAuth2令牌对请求进行身份验证
2.@EnableWebSecurity 开启WebSecurity模式
SpringCloud
1.Eureka相关
(1) @LoadBalanced 在使用 RestTemplate 的时候 如果 RestTemplate 上面有 这个注解,那么 这个 RestTemplate 调用的 远程地址,会走负载均衡器。
2.