java常见注解大全

一、启动类注解

1.启动类注解:@SpringBootApplication,启动类注解,是springboot程序入口,是一个复合注解,包含:

@SpringBootConfiguration//表示springboot类是配置类,可以被组件扫描器扫描,包含@Indexed,@Configuration(配置类注解)和元注解。

@EnableAutoConfiguration//开启自动配置功能,是一个复合注解,包含 @AutoConfigurationPackage和@Import({Registrar.class}),

@AutoConfigurationPackage,获取项目主程序启动类所在的根目录,从而指定后续组件扫描器扫描的包位置,注解的功能由 @Import实现,作用是向容器中导入注册的所有组件,导入的组件由 Registrar 决定。

加载所有含有@Configuration的配置类,并创建配置类的Bean实体,然后交IoC容器进行管理是一个复合注解包含

(1)AutoConfigurationPackage:指定springboot扫描包,默认就是扫描启动类同包下的类。

(2)@Import({AutoConfigurationImportSelector.class})注解:

**普通类:spring会将该类加载到spring容器中

**@Import一个类,该类实现了ImportBeanDefinitionRegistrar接口,在重写的registerBeanDefinitions方法里面,能 拿到BeanDefinitionRegistry bd的注册器,能手工往beanDefinitionMap中注册 beanDefinition。

**@Import一个类 该类实现了ImportSelector 重写selectImports方法该方法返回了String\[\]数组的对象,数组里面的类 都会注入到spring容器当中。

@ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ):组件扫描器,将指定包中的注解类自动配置到spring的bean容器中。

@ServletComponentScan注解:表示Servlet、Filter、Listener直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。

@EnableTransactionManagement:spring提供的注解, 开启声明式事务。

@importResource("classpath:bean.xml"):加载xml配置文件,因为spring4后不在支持xml文件,标注在配置类上,通常在启动类上。

二、读取配置文件注解

@ConfigurationProperties(prefix = "person"):标识在类上,和@Component搭配使用将application.propertis配置文件中所有前缀person与当前类属性进行绑定;和 @EnableConfigurationProperties (xxx.class)搭配,这个注解一般放在启动类上。

@PropertySource(value = "classpath:person.properties",encoding = "UTF-8"):读取自定义的properties文件,标识在类上;如果都在application.propertis进行配置,文件会很臃肿,可以自建person.propertis文件通过该注解指定路径配置文件路径,可与@ConfigurationProperties搭配使用读取文件,可读取xml类型文件,不支持yml文件读取。也可以与@@value搭配。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>

<entry key="druid.driverClassName">com.mysql.jdbc.Driver</entry>

<entry key="druid.url">jdbc:mysql://127.0.0.1/db1?useUnicode=true&characterEncoding=UTF-8</entry>

<entry key="druid.username">root</entry>

<entry key="druid.password">5201314..a</entry>

</properties>

@value("${xxx.xxx}"):从配置文件取值拿给某个实体类的属性

@ImportResource(locations = "classpath:xxx.xml"):用来加载 xml 配置文件,作用在启动类上,比如spring配置bean,可根据该文件去加载。

参考:SSM(Spring SpingMVC Mybatis)框架常用注解_ssm的注解-CSDN博客

三.实体类注解

1.建造实体类,需要导入lombok依赖。

@data:自动生getxxx和setxxx方法;

@NoArgsConstructor:无参构造;

@AllArgsConstructor :有参构造;

@Builder:使用建造者实例化对象;

@EqualsAndHashCode(callSuper = false) :生成 equals 和 hashCode 方法。当 callSuper = false 时,生成的 equals 和 hashCode 方法不会调用父类的相应方法,只会使用注解中指定的字段。

@nullable:可用于类方法,方法形参,表示可以为空,避免空指针异常,注意Java 的jdk也有这个注解,jdk的尽量少用。

2.实体类及属性与数据库表和字段绑定注解:由mybatis提供的注解,使实体对象与数据库表形成映射。

@TableName("数据库表"):指定数据库表名

@TableId(value = "Id", type = IdType.AUTO):指定表主键

@TableField("CodeType"):指定表字段

3.校验注解:开发中通常需要对数据进行校验,很麻烦,使用注解轻松实现,需要导包。

@Valid:开启校验,只能作用在方法、属性、构造、形参上,一般在controller层使用。

@Validated:开启校验,@Validated可以作用在类方法、属性、构造、参数上;作用在类上意为所有方法开启校验。

一般在controller层使用;

校验规则:定义校验规则作用在实体类。

@Min(value = -99, message = "值不能小于-99"):类属性上,限定最小值;

@Max(value = 100, message = "值不能超过100")

@NotEmpty:实体类属性上,不为空;

参考一:https://blog.csdn.net/leaf__yang/article/details/126037361

参考二: java mybatis 校验_mob64ca12d652c7的技术博客_51CTO博客

参考三:https://www.cnblogs.com/zhaodalei/p/16377549.html

4.fastjason:jason可将对象序列化成字符串,也可以反序列化为对象。都是同一个注解,参数不一样,作用在属性上。

@JSONField(name="userid"):前端传的值名与实体类不一致时,在实体类的字段上加该注解与前端传的值进行绑定;

@JSONField(ordinal=1):序列化时进行排序,1...n进行排序;

@JSONField(serialize = false):是否序列化,默认为true;

@JSONField(deserialize = false):是否反序列化,默认true;

@JSONField(format = "yyyy-MM-dd"):格式化日期;

@JSONField(deserializeUsing =xxx.class,serializeUsing=xxx.class):自定义序列化和反序列化,自定义xxx类实现 ObjectDeserializer,ObjectSerializer接口,

注:序列化,就是把一个对象,转化为某种特定的形式,然后以数据流的方式传输。网络通信只能是二进制数据传输,序列化可实现永久存储。

四、其他层注解

1.controller层注解

@RestConttroller:复合注解:@Conttroller和requestBody;

@Conttroller:扫描对象给spring进行管理;

@RequestBody:声名请求的数据为json格式,作用在方法的形参前;

@ResponseBody:声名返回的数据为json格式,作用在类上;

@RequestMapping:定义请求路径,作用在类上或方法上;

@GetMapping:定义get请求方式 的路径,作用在方法上;

@PostMapping:定义post请求方式的路径,作用在方法上;

@DeleteMapping:定义Delete请求方式路径,作用在方法上;

@RequestParams:将前端传的表单类型的值与形参进行绑定,作用在形参前;

@PutMapping:

@pathvarilble:将路径上restful格式的参数与当前方法的形参进行绑定,以获取参数,如删除时在路径后传id,可将id与形参进行绑定。

@RequestHeader(name = "Content-Type"):获取请求头信息,并绑定到方法的形参上,作用方法的形参前。

@CookieValue(name = "myCookie"):获取cookie信息。

2.service层注解

@service:扫描为bean,作用在service类上。

3.dao层

@Repository:将dao层的对象给spring管理;

@Mapper:编译后自动生成实现类,mybatis提供的,作用在dao层的接口上,配合@Insert、@Delete、@Update、@Select和结果集@Result、@Results、@ResultMap以及@One、@Many等写sql,可不在mapper映射文件写;

@Mapperscan:替代@Mapper注解,可进行扫包,避免每个接口类都加@Mapper的麻烦,作用在启动类上;

@Param("name"):用于dao层接口方法传入多个参数,sql接收多个参数,且参数名与方法传入的参数名不一致时将sql里的参数名于传入的进行绑定,传入为对象或传入为单个不能用;

mybatis注解参考一: mybatis注解-CSDN博客

4.生成api文档的注解:由swagger提供的注解,非Spring自带,通常用在conttroller层

@Api(value=""):类上,说明类的作用

@ApiOperation():请求的方法上,说明方法的用途、作用

更多参考: API注解用法笔记_api 注解-CSDN博客

5.缓存注解

参考一:https://www.jb51.net/article/259509.htm

参考二:https://blog.csdn.net/qq_46138160/article/details/111028298

6.日志注解

@Slf4j:当打印日志时,需要在类中写private static final Logger logger = LoggerFactory.getLogger(this.XXX.class);再logger.info("日志信息");现在只需要在类上加该注解即可使用log.info("日志信息")打印日志,需要导入lombok的包和插件以及slf4j-log4j12的包,还需要日志配置文件,idea2020.3以后可不装插件。

参考:https://blog.csdn.net/y516369/article/details/125570100

7.配置类注解:用于配置bean

@Configuration:配置类注解,作用在类上,等同于xml配置文件。

@Bean:等同于xml文件配置的bean标签,作用在方法上,意为将方法的返回值交给spring进行管理。

@AutoConfigureAfter(xxx.class):springboot2的注解,告诉spring该配置类应该在指定的其他配置类之后自动配置.

8.注入bean注解 :用于获取bean,常常需要获取某个对象调用它的方法,对象已经交给spring管理,只需注入即可。

@Resource(name = ""):根据名称注入(默认),也可以设置type属性指定类型,作用在属性上。

@Autowired():根据类型注入,作用在属性上

@Qualifier("类名"):根据名称注入,通常和@Autowired()搭配使用,在一个接口有多个实现类时,无法确定实现类,通过该注解指定实现类名称,等同于

@Resource注解。

9.事务注解

@EnableTransactionManagement:开启事务支持,作用在启动类上。

@Transactional(propagation = Propagation.REQUIRED, lation = Isolation.READ_COMMITTED,

rollbackFor = Exception.class):声名事务,通常加在service层的方法或类上,意为需要进行事务处理,作用在类上时,所有方法都需要事务处理。

10.切面类注解

@Aspect:声名切面类,通常需要和@compunent搭配使用,作用在类上。

@Pointcut("execution(* com.example.demo.controller..*.*(..))"):声名切入点,作用在方法上

@Around("chtrollerPict()"):环绕注解,作用在目标方法上

@Before: 目标方法执行之前执行的逻辑 ;

@After: 目标方法执行之后执行的逻辑,无论目标方法是否抛出异常;

@AfterThrowing: 目标方法抛出异常时执行的逻辑;

@AfterReturning: 目标方法成功执行并返回结果后执行的逻辑;

11.异常类注解

(1)全局异常类注解

@RestControllerAdvice:声名全局异常控制类(jason格式,复合注解),作用在类上。

@ControllerAdvice:声名异常控制类,作用在类上。

@ExceptionHandler(value = Exception.class):作用在方法上,声名异常处理的方法。

实例:

@RestControllerAdvice

public class ExceptionHandle{

@ExceptionHandler(value = Exception.class)

public void handleException(Exception e){

System.out.println("我是ExceptionHandleAOne中Exception处理:" + e.getMessage());

}

}

(2)异常处理注解

@SneakyThrows:替代try-catch处理异常并打印栈,作用在方法上由lombok提供;如在处理异常时,通常{//异常代码.......} catch (SchedulerException e) { e.printStackTrace();}使用该注解在方法上不写try-catch。

12.异步类注解

@EnableAsync:开启异步支持,作用在启动类上。

@Async:作用在需要异步的方法上,如在类上,所有的方法都会异步执行。

异步可参考: @EnableAsync@Async基本使用方法 - FDD豪 - 博客园

13.其他注解

@ SuppressWarnings:内置注解,取消警告,作用在类或方法上: java注解--@SuppressWarnings:抑制警告_java抑制警告-CSDN博客

@Scope("singleton"):spring的注解,声名bean作用域,作用在类上,或配置类含有的@bean的方法上,singleton单例模式、prototype原型(每次请求创建实例,多对象实例)、request请求(每次请求创建且仅当前请求有效)、session会话(会话创建新bean,当前会话内有效)。

@Deprecated:Java内置注解可以用在方法,属性,类上,表示不推荐程序员使用,但还是可以使用,就是给类或方法等加一个下划线。

@ConditionalOnProperty,spring提供注解,条件注解。

14.测试类注解

六、元注解:元注解可用于自定义注解

@Target({ElementType.TYPE})//注解作用的位置,类或者方法上

@Retention(RetentionPolicy.RUNTIME)//注解的生效期,加载类,启动时等

@Documented//是否生成api文档,加入该注解会生成api文档

@Inherited//是否可以被继承

@Indexed//自动生成META-INF/spring.components文件,文件包含被@Indexed注释的类的模式解析结果,Spring应用上下文进行组件扫描时,org.springframework.context.index.CandidateComponentsIndexLoader读取并加载,转换为CandidateComponentsIndex对象,此时组件扫描会读取CandidateComponentsIndex,而不进行实际扫描,从而提高组件扫描效率,减少应用启动时间。

@Repeatable(ComponentScans.class)//声名注解在同一个类中是否可重复使用。

自定义注解实例:

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.TYPE})

@Documented

public @interface ComponentScan {....}