java常见注解大全

发布时间:2025-06-24 16:37:09  作者:北方职教升学中心  阅读量:633


一、启动类注解
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 { ....}