java 注解分类

double

注解是个好东西,是JDK5.0引入的一种注释机制,类、方法、变量、参数、包等都可以被标注,Java标注可以通过反射获取标注内容,在编译器生成类文件时,标注可以被嵌入到字节码中,在Java虚拟机可以保留标注内容,在运行时可以获取到标注内容。

自动装配注解

@ConfigurationProperties(): 将配置文件的值映射到类上使用
@AutoConfigureAfter(): 在加载配置类之后在加载当前类
@Bean(): 是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里
@Scope(“prototype”): 对象在 spring 容器中的创建方式,详情
@ComponentScan(‘扫描包的路径’): 值为必填,并且不能为启动入口的同级目录或子文件夹目录,主要用于公用架包的引入。
@Autowired、@Resource: 两者区别区别
@Profile (配置化条件装配)
@Conditional (条件装配)
@Import(元类): 导入类

内置的成品条件注解

@ConditionalOnProperty(value=“属性名”, havingValue=“值”, matchIfMissing=true): matchIfMissing为true,表示默认

@ConditionalOnBean(): 当SpringIoc容器内存存在指定Bean,条件才成立
@ConditionalOnClass():
@ConditionalOnExpression(): 基于SPEL表达式作为判断条件
@ConditionalOnJava(): 基于JVM版本作为判断条件
@ConditionalOnJndi(): 在JNDI存在时查找指定的位置
@ConditionalOnMissingBean(): 当SpringIoc容器内部不存在指定Bean,条件才成立
@ConditionalOnMissingClass(): 当SpringIoc容器内部不存在指定Class,条件才成立
@ConditionalOnNotWebApplication(): 当前项目不是web项目,条件才成立
@ConditionalOnResource(): 指定路径是否有指定的值
@ConditionalOnSingleCandidate(): 当指定Bean在SpringIoc容器内只有一个,或者虽然有多个但是指定首选的Bean
@ConditionalOnWebApplication(): 当前项目是web项目的条件

文档注解

@Description(“xx”): 描述bean

Servlet注解

@ServletComponentScan(在 SpringBootApplication 上使用)
@WebServlet
@WebFilter
@WebListener

捕获异常注解

@ExceptionHandler

Web Mvc注解

@RequestMapping: 请求地址映射注解
@ResponseBody
@RequestBody
@RestController: 结合 @Controller和@RequestBody
@Qualifier: 当一个接口有多个实现类且均已注入到spring容器中,此时需要使用该注解明确指定使用哪个实现类, 详情
@EventListener:

异常错误类注解

@ControllerAdvice
@ExceptionHandler

  • 模式注解(把一个组件/类/bean 实例化并添加到容器里去)

@Component: 通用组件模式注解,以下4个注解都是以 @Component 为基础实现的
@Primary: 当一个接口有多个类实现情况下,可以提高指定bean的优先级注入到容器中

@Service: 服务模式注解
@Repository: 数据仓储模式注解(用于DAO)
@Controller: Web控制器模式注解

@Configuration(): 用于定义配置类,被注解类的内部包,含有一个或多个被@Bean注解的方法,这些方法将会被扫描用于构建bean定义,初始化到Spring容器中
@Lazy: 延迟实例化bean(PS:必须在调用它的地方也同时加上@Lazy), 详情

lombok注解

它是基于 JSR-269 规范实现的

类:

@Getter: 生成 get 方法
@Setter: 生成 set 方法
@Tostring: 生成 toString 方法
@EqualsAndHashCode: 生成 equals、hashCode 方法
@Data: 生成 get、set、toString 方法外,还会生成 equals、hashCode 等方法,除非必要,不然不推荐使用
@AllArgsConstructor: 生成全参数构造函数
@NoArgsConstructor: 生成无参数构造函数
@RequiredArgsConstructor: 只会生成带有 NonNull 注解的构造参数
@Builder: 慎用用吧,如果要返回给前端需要添加上 @Getter 注解

属性:

@NonNull: 值不能为null

对于使用 final 关键词修饰的属性,只会生成 get 方法。

@Enable 模块注解

以 @Enable 开头的这样的一些注解,它可以叫做 模块装配,主要是用于把很多小的配置模块,根据自己的业务需求装配成一个大的配置模块。

spring framework 框架
@EnableWebMvc: Web MVC模块
@EnableTransactionManagement: 事务管理模块
@EnableCaching: Caching 模块
@EnableMBeanExport: JMX模块
@EnableAsync: 异步处理模型
@EnableWebFlux: Web Flux 模块
@EnableAspectJAutoProxy: AspectJ代理模块

spring boot
@EnableAutoConfiguration(): 激活自动化配置
@EnableManagementContext(): Actuator 管理模块
@EnableConfigurationProperties(): 配置属性绑定模块
@EnableOAuth2Sso(): OAuth2单点登录模块

@EnableScheduling + @Scheduled(…): 定时任务注解

spring cloud
@EnableEurekaServer(): Eureka服务器模块
@EnableConfigServer(): 配置服务器模块
@EnableFeignClients(): feign客户端模块
@EnableZuulProxy(): 服务网关 Zuul 模块
@EnableCircuitBreaker(): 服务熔断模块

扩展阅读

Spring常用注解总结