转载

Spring 中最常用的 5 个注解

Java 中注解的引入改变了 Java 开发人员配置应用的方式。注解在 Java 的 1.5 版本中引入进来,它使开发人员能够在代码中维护配置而不必依赖于外部配置文件。

Spring 中最常用的 5 个注解

注解是可以添加到 Java 类、方法、变量、参数或者包中的一种语法元数据。

Spring 框架推荐开发人员通过使用它提供的大量内置注解来配置应用。在这篇文章中,我们重点介绍 Spring Core 框架中最常用的几个注解。

1. @Autowired 注解

这个注解用于声明类中的依赖项。基于这个注解,Spring DI 框架可以注入对应的依赖。 @Autowired 可以用在构造函数、属性和 setter 方法上。它是 JSR-330(Java 依赖注入) @Inject 注解的替代方法。

属性注入

下面的代码演示了如何将属性作为依赖项注入:

import org.springframework.beans.factory.annotation.Autowired;

public class UserController {

    @Autowired
    private UserRepository userRepository;
    
}

Setter 方法注入

也可以通过 setter 方法完成依赖注入,如下所示:

import org.springframework.beans.factory.annotation.Autowired;

public class UserController {

    private UserRepository userRepository;

    public UserRepository getUserRepository() {
        return userRepository;
    }

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    
}

构造函数注入

还可以在构造函数上使用:

import org.springframework.beans.factory.annotation.Autowired;

public class UserController {

    private UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
}

2. @Bean 注解

这个注解应用在方法上,并生成由 Spring 管理的 bean。Spring 配置类通常包含 bean 声明。通常,应用的 POJO 部分被声明为 Spring 组件,并且 Spring 提供的组件扫描机制会在 Spring IoC 容器中自动创建 bean 。但是,当 POJO 的代码不可用并且我们需要创建 Sprint 管理的 bean 时, @bean 注解就会非常有用。

以下代码演示了 @Bean 注解的用法:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SampleConfiguration {

    @Bean
    public User user(){
        return new User();
    }

    @Bean(name = "admin", initMethod = "", destroyMethod = "")
    public Admin admin(){
        return new Admin();
    }
}

此外,这个注解还提供给了一些属性用以管理 bean 配置,例如:名称、初始化方法、销毁方法等。

3. @Value 注解

Spring 的 @Value 注解非常有用,可以方便地使用 Spring 表达式语言(Spring Expression Language,SpEL)提供默认值或控制变量的值。

默认值

在下边的示例中, name 变量配置了 @Value 注解。如果实例化 User 类时没有为 name 提供值,就会使用 @Value 配置的默认值 default-user

import org.springframework.beans.factory.annotation.Value;

public class User {

    @Value("default-user")
    private String name;
}

从环境中读取属性

下面的示例演示如何从环境中读取一个值并赋给变量:

public class User {

    @Value("${NAME}")
    private String name;
}

使用 Spring 表达式语言

下边的示例演示如何使用 Spring 表达式语言来获取值并赋值给变量。注意这里使用了 # 来替代之前使用的 $

public class User {

    @Value("#{systemProperties['user.name']}")
    private String name;
}

4. @Profile 注解

在开发的生命周期中,应用会经历多个环境和阶段。比如, devtestuat (预发布)、 industry (生产)等。根据不同的环境和阶段,需要有不同的配置。在这种情况下, @Profile 注解非常方便,它使开发人员可以灵活地控制应该激活的组件。

@Profile("dev")
public class DevDataSource {
}

@Profile("test")
public class QADataSource {

}

在上边的示例中,我们提供了两个配置,一个用于 dev 环境,另一个用于 test 环境。根据环境类型,我们可以提供不同的配置,Spring 将会确保加载与之对应的配置。

5. @Import 注解

@Import 注解使我们可以将一个或多个组件的配置导入到另一个配置类中。

@Configuration
@Import(SampleConfiguration.class)
public class AnotherConfiguration {

    @Bean
    public Product product(){
        return new Product();
    }
}

在上边的配置类中,我们导入了另一个配置类中定义的配置。

总结

本文我们演示了在 Spring 应用开发中使用最频繁的一些注解。尽管有大量的 Spring 注解,但那些注解在大多数 Spring 应用中用到的不多。

原文  https://jpanj.com/2019/top-5-spring-annotation/
正文到此结束
Loading...