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