当前位置: 首页 > news >正文

Java 学习 --SpringBoot 常用注解详解

在日常 Java 开发或者说在日常 Java 学习中总会遇到各种各样的注解,有 Spring 官方的注解,有自定义的注解,总之你在开发中一定会遇到注解的使用,也是有了注解才使得开发效率更高,也使得开发人员不用去关注 SpringBoot 内部实现,而只需要关注自身业务,在需要的时候直接使用注解即可,而无需再次开发公共功能,从而提高开发效率,那么 SpringBoot 常用注解有哪些呢?我们继续来看 Spring Bean 注解、Spring DI 注解、Bean Scops 注解以及 Spring Boot 注解

Spring Bean 注解

@ComponentScan

@ComponentScan 注解用于配置 Spring 需要扫描的被组件注解注释的类所在的包。可以通过配置其 basePackages 属性或者 value 属性来配置需要扫描的包路径。value 属性是 basePackages 的别名,比如

@Component

@Component 注解用于标注一个普通的组件类,它没有明确的业务范围,只是通知 Spring 被此注解的类需要被纳入到 Spring Bean 容器中并进行管理,比如

@Service

@Service 注解是 @Component 的一个延伸(特例),它用于标注业务逻辑类。与 @Component 注解一样,被此注解标注的类,会自动被 Spring 所管理,比如

@Repository

@Repository 注解也是 @Component 注解的延伸,与 @Component 注解一样,被此注解标注的类会被 Spring 自动管理起来,@Repository 注解用于标注 DAO 层的数据持久化类比如

Spring DI 注解

@DependsOn

@DependsOn 注解可以配置 Spring IoC 容器在初始化一个 Bean 之前,先初始化其他的 Bean 对象。

@Bean

@Bean 注解主要的作用是告知 Spring,被此注解所标注的类将需要纳入到 Bean 管理工厂中,比如

Scops 注解

@Scope

@Scope 注解可以用来定义 @Component 标注的类的作用范围以及 @Bean 所标记的类的作用范围。@Scope 所限定的作用范围有:singleton、prototype、request、session、globalSession 或者其他的自定义范围。这里以 prototype 为例子进行讲解。

当一个 Spring Bean 被声明为 prototype(原型模式)时,在每次需要使用到该类的时候,Spring IoC 容器都会初始化一个新的改类的实例。在定义一个 Bean 时,可以设置 Bean 的 scope 属性为 prototype:scope=“prototype”,也可以使用 @Scope 注解设置。

当 @Scope 的作用范围设置成 Singleton 时,被此注解所标注的类只会被 Spring IoC 容器初始化一次。在默认情况下,Spring IoC 容器所初始化的类实例都为 singleton。

容器配置注解

@Autowired

@Autowired 注解用于标记 Spring 将要解析和注入的依赖项。此注解可以作用在构造函数、字段和 setter 方法上,比如

@Primary

当系统中需要配置多个具有相同类型的 bean 时,@Primary 可以定义这些 Bean 的优先级,比如

@PostConstruct @PreDestroy

这两个注解不属于 Spring,它们是源于 JSR-250 中的两个注解,位于 common-annotations.jar 中。@PostConstruct 注解用于标注在 Bean 被 Spring 初始化之前需要执行的方法,比如

@PreDestroy 注解用于标注 Bean 被销毁前需要执行的方法,比如

@Qualifier

当系统中存在同一类型的多个 Bean 时,@Autowired 在进行依赖注入的时候就不知道该选择哪一个实现类进行注入。此时,我们可以使用 @Qualifier 注解来微调,帮助 @Autowired 选择正确的依赖项,比如

Spring Boot 注解

@SpringBootApplication

@SpringBootApplication 注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个 Bean,并自动触发自动配置 Bean 和自动扫描组件。此注解相当于 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 的组合,比如启动类

@EnableAutoConfiguration

@EnableAutoConfiguration 注解用于通知 Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项。

@ConditionalOnClass @ConditionalOnMissingClass

这两个注解属于类条件注解,它们根据是否存在某个类作为判断依据来决定是否要执行某些配置。

@ConditionalOnBean @ConditionalOnMissingBean

这两个注解属于对象条件注解,根据是否存在某个对象作为依据来决定是否要执行某些配置方法。

@ConditionalOnProperty

@ConditionalOnProperty 注解会根据 Spring 配置文件中的配置项是否满足配置要求,从而决定是否要执行被其标注的方法,比如

@ConditionalOnResource

此注解用于检测当某个配置文件存在时,则触发被其标注的方法。

@ConditionalOnWebApplication @ConditionalOnNotWebApplication

这两个注解用于判断当前的应用程序是否是 Web 应用程序。如果当前应用是 Web 应用程序,则使用 Spring WebApplicationContext,并定义其会话的生命周期。

@ConditionalExpression

此注解可以让我们控制更细粒度的基于表达式的配置条件限制。当表达式满足某个条件或者表达式为真的时候,将会执行被此注解标注的方法。

@Conditional

@Conditional 注解可以控制更为复杂的配置条件。在 Spring 内置的条件控制注解不满足应用需求的时候,可以使用此注解定义自定义的控制条件,以达到自定义的要求,比如

总结

以上就是 SpringBoot 日常开发中常用注解的剩下部分,当然,这里不是全部的注解,毕竟有一些注解使用频率不高,这里主要讲解的是常用注解,对于使用频率不高比较生僻的注解也是有存在的意义的,感兴趣的小伙伴可以自行阅读源码查看。

相关文章:

  • 基于springboot网上书城系统
  • Java项目:JSP药店药品商城管理系统
  • app启动流程
  • 程序员的民宿情结
  • PD 重要监控指标详解
  • 数字集成电路(中)
  • 为什么Spring中的bean默认都是单例模式?
  • 【日常需求】一次使用EasyExcel而引发的问题与思考~
  • Docker 镜像拉取
  • Android 12 蓝牙打开
  • Linux常用基本命令详解(一)
  • 逻辑漏洞——业务逻辑问题
  • C++-vector的代码实现(超详细)
  • Linux之Platform设备驱动
  • Linux 入门篇
  • 2017-08-04 前端日报
  • 2017前端实习生面试总结
  • Angular4 模板式表单用法以及验证
  • Angular数据绑定机制
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • log4j2输出到kafka
  • miaov-React 最佳入门
  • mysql 数据库四种事务隔离级别
  • nodejs实现webservice问题总结
  • php中curl和soap方式请求服务超时问题
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 浮动相关
  • 浅谈web中前端模板引擎的使用
  • 区块链技术特点之去中心化特性
  • 事件委托的小应用
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 阿里云重庆大学大数据训练营落地分享
  • 正则表达式-基础知识Review
  • (007)XHTML文档之标题——h1~h6
  • (02)vite环境变量配置
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (7)STL算法之交换赋值
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (转)visual stdio 书签功能介绍
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • **PHP二维数组遍历时同时赋值
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net IE10 _doPostBack 未定义
  • .net 获取url的方法
  • .NET导入Excel数据
  • .NET关于 跳过SSL中遇到的问题
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • :not(:first-child)和:not(:last-child)的用法
  • @JSONField或@JsonProperty注解使用
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • @Transient注解
  • [20160902]rm -rf的惨案.txt
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)