@Deprecated重写, 标识覆盖它的父类的方法
@Suppvisewarnings已过期,表示方法是不被建议使用的
@Target压制警告,抑制警告
表示该注解用于什么地方,可取的值包括:
@RetentionElemenetType.CONSTRUCTOR 构造器声明 ElemenetType.FIELD 域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE 局部变量声明 ElemenetType.METHOD 方法声明
ElemenetType.PACKAGE 包声明 ElemenetType.PARAMETER 参数声明
ElemenetType.TYPE 类,接口(包括注解类型)或enum声明 ElementType.ANNOTATION_TYPE 注解
表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
@DocumentedRetentionPolicy.SOURCE 注解将被编译器丢弃 RetentionPolicy.CLASS
注解在class文件中可用,但会被VM丢弃 RetentionPolicy.RUNTIME
JVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
@Inherited将此注解包含在 javadoc 中
Spring相关注解 1.声明bean的注解 @Component允许子类继承父类中的注解
@Service组件,没有明确的角色
@Repository在业务逻辑层使用(service层)
@Controller在数据访问层使用(dao层)
2.注入bean的注解 @Autowired在展现层使用,控制器
@Resource@Autowired注解可用于为类的属性、构造器、方法进行注值。默认情况下,其依赖的对象必须存在(bean可用),如果需要改变这种默认方式,可以设置其required属性为false。
还有一个比较重要的点就是,@Autowired注解默认按照类型装配,如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合
@Qualifier 注解进行限定,指定注入的bean名称。
@Inject@Resource有两个中重要的属性:name和type。
name属性指定byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时,
@Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。
3.java配置类相关注解 @Bean@Inject支持构造函数、方法和字段注解,也可能使用于静态实例成员。可注解成员可以是任意修饰符。
注入顺序:构造函数、字段,然后是方法。父类的字段和方法注入优先于子类的字段和方法,同一类中的字段和方法是没有顺序的。
@Inject注解的构造函数可以是无参或多个参数的构造函数。@Inject每个类中最多注解一个构造函数。
@Configuration注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)
@ComponentScan声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)
@WishlyConfiguration用于对Component进行扫描,相当于xml中的(类上)
4.切面(AOP)相关注解为@Configuration与@ComponentScan的组合注解,可以替代这两个注解
@Aspect 声明一个切面(类上)Spring支持AspectJ的注解式切面编程。
@After 在方法执行之后执行(方法上) @Before 在方法执行之前执行(方法上) @Around 在方法执行之前与之后执行(方法上) @PointCut 声明切点使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
SpringBoot常用注解 1.SpringBoot框架常用 @RestController在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)
@RequestMapping和@Controller指定一个类,作为控制器的注解 ,并说明其区别
@EnableAutoConfiguration方法级别的映射注解,这一个用过Spring MVC的小伙伴相信都很熟悉
@Configuration和@SpringBootApplication是类级别的注解,根据maven依赖的jar来自动猜测完成正确的spring的对应配置,只要引入了spring-boot-starter-web的依赖,默认会自动配置Spring
MVC和tomcat容器
@ComponentScan类级别的注解,一般这个注解,我们用来标识main方法所在的类,完成元数据bean的初始化。
@ImportResource类级别的注解,自动扫描加载所有的Spring组件包括Bean注入,一般用在main方法所在的类上
@Autowired注解类级别注解,当我们必须使用一个xml的配置时,使用@ImportResource和@Configuration来标识这个文件资源的类。
@Component一般结合@ComponentScan注解,来自动注入一个Service或Dao级别的Bean
2.redis缓存常用 @EnableCaching类级别注解,用来标识一个组件,比如我自定了一个filter,则需要此注解标识之后,Spring Boot才会正确识别。
springboot是如何管理事务的?直接写@transactional注解就行,在方法就是方法事务,类上就是类事务。
@CacheConfig开启缓存功能,配置类中需要加上这个注解,有了这个注解之后,spring才知道你需要使用缓存的功能,其他和缓存相关的注解才会有效
@Cacheable在要用缓存的类上添加@CacheConfig(cacheNames = “product”),相当于作用域是product
赋予缓存功能,在类中要使用缓存的方法上添加
@Cacheable(key = “#sellerId”,condition = “#sellerId.length() > 3”,unless = “#result.getCode() !=0”)
condition 表示对入参进行判断,如果判断结果为false,则不使用缓存即不会到redis取到数据,否则去redis 取到数据
@CacheEvictunless 表示对方法返回的结果进行判断,因为是unless,所以变得是这么判断的,结果如果不等于false,则去redis取到数据,否则不使用缓存(相当于把判断语句写反过来)
@CachePut@CacheEvict(key = “123”)该注解表示要清除123这个key,作用域可以在类上面
@CacheEvict(cacheNames = “product”,key = “123”)
SpringMVC相关注解 @EnableWebMvc@CachePut(cacheNames = “product”,key = “123”)表示对123这个key进行更新
@Controller在配置类中开启Web
MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。
@RequestMapping声明该类为SpringMVC中的Controller
@ResponseBody用于映射Web请求,包括访问路径和参数(类或方法上)
@RequestBody支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)
@PathVariable允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)
@RestController用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
@ControllerAdvice该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
@ExceptionHandler通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,这对所有注解了
@RequestMapping的控制器内的方法有效。
@InitBinder用于全局处理控制器里的异常
@ModelAttribute用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
Lombok常用注解 @Getter/@Setter本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。
@NonNull/@NotEmpty代替 实体类中getter 和 setter 方法
@NoArgsConstructor/@AllArgsConstructor/@RequiredArgsConstructor@NonNull 用于标记类中不能允许为 null 的字段或者参数上
@NotEmpty 用于标记类中不能允许为空的字段或者参数上
@ToString/@EqualsAndHashCode@NoArgsConstructor 为实体类生成无参的构造器方法
@AllArgsConstructor 为实体类生成除了static修饰的字段之外带有各参数的构造器方法。
@RequiredArgsConstructor 为实体类生成指定字段的构造器方法,而这些字段需要被 final,或者 @NonNull
@Data/@Value@EqualsAndHashCode 根据类所拥有的非静态字段自动重写 equals 方法和 hashCode方法,方便我们用于对象间的比较。用法和@ToString类似,同样也支持@EqualsAndHashCode.Exclude和@EqualsAndHashCode.Include
@Data/@Value 注解,提供了更综合的生成代码功能,等价于下面几个注解。
@see lombok.Getter @see lombok.experimental.FieldDefaults @see lombok.AllArgsConstructor @see lombok.ToString @see lombok.EqualsAndHashCode @see lombok.Data@Builder
@Builder 是一个非常强大的注解,提供了一种基于建造者模式的构建对象的 API。使用 @Builder 注解为给我们的实体类自动生成 builder() 方法,并且直接根据字段名称方法进行字段赋值,最后使用build()方法构建出一个实体对象。
@Data
@Builder
public class LombokBuilder {
private int id;
private String name;
}
public class TestMain {
public static void main(String[] args) {
LombokBuilder lombokBuilder = LombokBuilder.builder().id(2).build();
}
}



