Java 中注解的引入改变了 Java 开发人员配置应用的方式。注解在 Java 的 1.5 版本中引入进来,它使开发人员能够在代码中维护配置而不必依赖于外部配置文件。
注解是可以添加到 Java 类、方法、变量、参数或者包中的一种语法元数据。
Spring 框架推荐开发人员通过使用它提供的大量内置注解来配置应用。在这篇文章中,我们重点介绍 Spring Core
框架中最常用的几个注解。
1. @Autowired 注解
这个注解用于声明类中的依赖项。基于这个注解,Spring DI 框架可以注入对应的依赖。@Autowired
可以用在构造函数、属性和 setter
方法上。它是 JSR-330(Java 依赖注入)@Inject
注解的替代方法。
属性注入
下面的代码演示了如何将属性作为依赖项注入:
1 | import org.springframework.beans.factory.annotation.Autowired; |
Setter 方法注入
也可以通过 setter
方法完成依赖注入,如下所示:
1 | import org.springframework.beans.factory.annotation.Autowired; |
构造函数注入
还可以在构造函数上使用:
1 | import org.springframework.beans.factory.annotation.Autowired; |
2. @Bean 注解
这个注解应用在方法上,并生成由 Spring 管理的 bean。Spring 配置类通常包含 bean 声明。通常,应用的 POJO
部分被声明为 Spring 组件,并且 Spring 提供的组件扫描机制会在 Spring IoC 容器中自动创建 bean
。但是,当 POJO
的代码不可用并且我们需要创建 Sprint 管理的 bean
时,@bean
注解就会非常有用。
以下代码演示了 @Bean
注解的用法:
1 | import org.springframework.context.annotation.Bean; |
此外,这个注解还提供给了一些属性用以管理 bean
配置,例如:名称、初始化方法、销毁方法等。
3. @Value 注解
Spring 的 @Value
注解非常有用,可以方便地使用 Spring 表达式语言(Spring Expression Language,SpEL)提供默认值或控制变量的值。
默认值
在下边的示例中,name
变量配置了 @Value
注解。如果实例化 User
类时没有为 name
提供值,就会使用 @Value
配置的默认值 default-user
。
1 | import org.springframework.beans.factory.annotation.Value; |
从环境中读取属性
下面的示例演示如何从环境中读取一个值并赋给变量:
1 | public class User { |
使用 Spring 表达式语言
下边的示例演示如何使用 Spring 表达式语言来获取值并赋值给变量。注意这里使用了 #
来替代之前使用的 $
。
1 | public class User { |
4. @Profile 注解
在开发的生命周期中,应用会经历多个环境和阶段。比如,dev
、test
、uat
(预发布)、industry
(生产)等。根据不同的环境和阶段,需要有不同的配置。在这种情况下,@Profile
注解非常方便,它使开发人员可以灵活地控制应该激活的组件。
1 | @Profile("dev") |
在上边的示例中,我们提供了两个配置,一个用于 dev
环境,另一个用于 test
环境。根据环境类型,我们可以提供不同的配置,Spring 将会确保加载与之对应的配置。
5. @Import 注解
@Import
注解使我们可以将一个或多个组件的配置导入到另一个配置类中。
1 | @Configuration |
在上边的配置类中,我们导入了另一个配置类中定义的配置。
总结
本文我们演示了在 Spring 应用开发中使用最频繁的一些注解。尽管有大量的 Spring 注解,但那些注解在大多数 Spring 应用中用到的不多。