注解

注解(Annotation),元数据(Meta data)的一种形式,提供了程序本身之外的数据。

jdk1.5引入的特性,注解与类、接口、枚举在同一个层次,并可以应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。

注解分为元注解和基本内置注解。

Java原生

元注解

@Target(ElementType.XXX) //目标注解–表示这个注解能放在什么位置上

@Retention(RetentionPolicy.XXX) //标明注解的生命周期

// ElementType.PACKAGE:该注解只能声明在一个包名前。
// ElementType.ANNOTATION_TYPE:该注解只能声明在一个注解类型前。
// ElementType.TYPE:该注解只能声明在一个类前。
// ElementType.CONSTRUCTOR:该注解只能声明在一个类的构造方法前。
// ElementType.LOCAL_VARIABLE:该注解只能声明在一个局部变量前。
// ElementType.METHOD:该注解只能声明在一个类的方法前。
// ElementType.PARAMETER:该注解只能声明在一个方法参数前。
// ElementType.FIELD:该注解只能声明在一个类的字段前。

// RetentionPolicy.SOURCE : 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
// RetentionPolicy.CLASS : 注解被保留到class文件,但jvm加载class文件时候被遗弃,默认;
// RetentionPolicy.RUNTIME : 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
// Java源文件(.java文件) —> .class文件 —> 内存中的字节码。

@Inherited //当一个类继承了拥有此注解的类时,即使当前类没有任何注解。只要父类的注解拥有该注解,则在子类中可以获取到此注解

@Documented //标记注解,用于描述其他类型的注解应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。

@Repeatable //(重复注解)被标记的注解可以多次应用于相同的声明或类型使用

@Native //提示程序可以从本机代码(c\c++)引用java中定义的常量值(JNI)

基本内置注解

@Deprecated //表示此方法或类已经过时,不再建议使用

@Override //重写方法声明。

@SuppressWarnings //指示应在带注解的元素(以及包含在注解中的所有程序元素)。注意,在给定元素中被抑制的警告集是在所有包含元素中被抑制的警告的超集。还要保证抑制影响的范围最小。

@SafeVarargs //用来抑制“堆污染“警告

@FunctionalInterface //(函数式接口)主要用于lambda表达式 只能标记在有且仅有一个抽象方法的接口上

标准

@Resource //依赖注入,给对象属性注入数据,可以定义在字段,方法上。一般用在注入dao层数据源,跟@Autowired相似,区别就是@Autowired默认是先根据类型,而@Resource默认是先根据名称

Lombook

@Data // 自动生成getter和setter,toString,equals和hashCode等方法

@NoArgsConstructor // 生成无参构造函数

@AllArgsConstructor // 生成全参构造函数

@Setter@Getter :对类中的属性生成相应的getter和setter方法。

@ToString :生成toString()方法。该注解有以下属性:

callSuper:是否输出父类的toString()方法,默认为false。

includeFieldNames:是否包含字段名称,默认为true。

exclude:排除生成到toString方法中的字段。

@EqualsAndHashCode :生成equals()方法和hashCode()方法。

@NonNull:判断是否为空,如果为空,则抛出java.lang.NullPointerException。

@Builder :生成构建器。注意: 会自动生成全参构造方法,可能会导致默认无参构造方法失效。

@Slf4j :用于简化日志记录的代码实现。会自动生成一个名为log的SLF4J类型的日志记录器实例。这个实例可以用来记录不同级别的日志信息,如调试信息(debug)、信息(info)、警告(warn)、错误(error)等。

SpringBoot

@Controller //应用在MVC层(控制层)

@Service //应用在service层(业务逻辑层)

@Reponsitory //应用在dao层(实现类)(数据访问层)

@component //表示一个带注释的类是一个“组件”,成为Spring管理的Bean(元注解)

@Autowired //依赖注入工具

@Qualifier //指定注入对象

@Value //指定注入值

WEB

@RequestMapping //用来映射web请求(访问路径和参数),处理类和方法的。可以注解在类和方法上,注解在方法上的路径会继承注解在类上的路径。同时支持Serlvet的request和response作为参数,也支持对request和response的媒体类型进行配置。其中有value(路径),produces(定义返回的媒体类型和字符集),method(指定请求方式)等属性。

@GetMapping@PostMapping@RequestMapping的两种特例,一个是get方式请求,一个是post方式

@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)(“参数名”) //将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

@PathVariable(value=”username”) //放置在参数前,用来接受路径参数。

@ResponseBody //将返回值放在response体内。返回的是数据而不是页面。异步请求返回json数据使用。

@RequestBody //允许request的参数在request体中,而不是在直接链接在地址的后面。放置在参数前。

@RestController //组合注解@Controller@ResponseBody,当我们只开发一个和页面交互数据的控制层时可以使用此注解。

@ControllerAdvice //用在类上,声明一个控制器建言,它也组合了@Component注解,会自动注册为Spring的Bean。

@ExceptionHandler(value=Exception.class)用在方法上定义全局处理,通过他的value属性可以过滤拦截的条件:表示拦截所有的Exception。

@SpringBootApplication:启动

@EnableAutoConfiguration:自动配置

@Configuration:配置文件

@ComponentScan:自动扫描

AOP

@Aspect  // 使用@Aspect注解声明一个切面

@After //后置建言

@Before //前置建言

@Around //环绕

@PointCut //切点

@annotation //修饰在某一个方法上,那么就会命中,执行定义的类增强逻辑

测试

@SpringBootTest

@Test

@RunWith(SpringJUnit4ClassRunner.class)

@Ignore : 被忽略的测试方法

@Before: 每一个测试方法之前运行

@After : 每一个测试方法之后运行

@BeforeClass: 所有测试开始之前运行

@AfterClass: 所有测试结束之后运行

其他

@Transactional:事务声明(一般默认配置即可满足要求,当然也可以自定义)

@Cacheable //声明数据缓存

@PropertySource:文件引入

指定文件地址。提供了一种方便的、声明性的机制,用于向Spring的环境添加PropertySource。与@configuration类一起使用。

@Async //多线程异步方法

@EnableAsync //多线程,开启异步任务支持。注解在配置类上。

@EnableScheduling //注解在配置类上,开启对计划任务的支持。

@Scheduled(fixedRate = 60 * 1000) //每分钟执行一次。支持多种类型的计划任务:cron,fixDelay,fixRate。

@profile()//指定类或方法在特定的 Profile 环境生效,任何@Component或@Configuration注解的类都可以使用@Profile注解。