Spring Boot 条件注解详情

下面是关于Spring Boot条件注解的详细攻略:

1. 条件注解的概述

Spring Boot 的条件注解可以使得我们能够根据给定的条件来控制 Bean 是否被创建。在 Spring Boot 中一共有 @ConditionalOnBean、@ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnMissingClass、@ConditionalOnProperty 等多个注解,每个注解都对应一些特定的条件,让我们能够控制 Bean 的创建。

2. 条件注解的使用方法

下面介绍一下 Spring Boot 条件注解的使用方法,以 @ConditionalOnBean 和 @ConditionalOnMissingBean 为例。

2.1 引入 Spring Boot Starter 示例

首先,在 pom.xml 文件中引入 Spring Boot Starter:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>${spring-boot.version}</version>
    </dependency>
</dependencies>

2.2 添加条件 Bean 示例

我们定义一个 HelloService 接口及其实现类 HelloServiceImpl,并通过条件注解来控制其是否创建。

public interface HelloService {
    String sayHello(String name);
}

@Service
@ConditionalOnBean(name = "dataSource")
public class HelloServiceImpl implements HelloService {

    @Autowired
    private DataSource dataSource;

    @Override
    public String sayHello(String name) {
        return "Hello, " + name + "!";
    }
}

上述代码中,我们通过 @ConditionalOnBean(name = "dataSource")HelloServiceImpl 添加了一个条件。当名为 dataSource 的 Bean 存在时,才会创建 HelloServiceImpl

同时,为了测试条件注解的作用,我们还需要定义一个名为 dataSource 的 Bean,在其它类中使用该 Bean 也可以在启动时看到输出信息。

@Configuration
public class DBConfig {

    @Bean
    public DataSource dataSource(){
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/test");
        ds.setUsername("root");
        ds.setPassword("root");

        return ds;
    }
}

2.3 测试条件注解是否生效

为了测试条件注解是否生效,我们在主程序中添加如下代码:

@SpringBootApplication
public class MainApplication implements CommandLineRunner {

    @Autowired(required = false)
    private HelloService helloService;

    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        if (helloService != null) {
            System.out.println(helloService.sayHello("world"));
        } else {
            System.out.println("helloService is null");
        }
    }
}

当程序启动时,根据 dataSource 这个 Bean 是否存在来判断 HelloServiceImpl 是否被创建。如果 dataSource 这个 Bean 被正确地创建了,则可以看到类似如下的输出信息:

Hello, world!

如果 dataSource 这个 Bean 没有创建,则可以看到输出信息:

helloService is null

2.4 @ConditionalOnMissingBean 示例

除了 @ConditionalOnBean,还有 @ConditionalOnMissingBean,它的作用与 @ConditionalOnBean 相反,即当指定的 Bean 不存在时才创建当前 Bean。

@Service
@ConditionalOnMissingBean(TestService.class)
public class TestServiceImpl implements TestService {
    @Override
    public void hello(String name) {
        System.out.println("Hello, " + name + "!");
    }
}

上述代码中,如果不存在 TestServiceImpl 这个 Bean,则会创建它。当然,如果已经存在了同名的 Bean,则不会创建。

3. 总结

本文简要介绍了 Spring Boot 条件注解的使用方法,可以有效地控制 Bean 的创建。希望本文能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 条件注解详情 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SQL WHERE 条件查询

    关于 SQL WHERE 条件查询,以下是完整的攻略及两个实例: SQL WHERE 条件查询 概述 SQL 是结构化查询语言,它可以用来操作关系型数据库。WHERE 是 SQL 的一个子句,用来过滤 SELECT 操作所查询到的记录。 符合 WHERE 条件的记录会被 SELECT 语句返回,而不符合的则会被忽略。在 WHERE 条件中,可以使用比较运算符…

    database 2023年3月27日
    00
  • 如果redis没有设置expire,他是否默认永不过期?

    通过EXPIRE key seconds 命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定的。 Redis key过期的方式有三种: 惰性删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删…

    Redis 2023年4月13日
    00
  • 一篇文章揭秘Redis的磁盘持久化机制

    一篇文章揭秘Redis的磁盘持久化机制 Redis是一个开源的高性能key-value存储系统,它最初是为提高page view数而开发的,也是一个很适合做缓存的应用程序。因此,Redis的数据持久化就显得特别重要了。Redis提供了两种数据持久化的方式:RDB快照和AOF日志。 RDB快照 RDB快照是指把内存中的数据定期dump到磁盘中,可以看做是一个数…

    database 2023年5月22日
    00
  • 常用的SQL例句 数据库开发所需知识

    针对常用的SQL例句和数据库开发所需知识,我可以提供如下攻略: SQL语句基础 数据库和表的管理 创建数据库: CREATE DATABASE mydatabase; 删除数据库: DROP DATABASE mydatabase; 创建表: CREATE TABLE mytable ( id INT PRIMARY KEY, name VARCHAR(30…

    database 2023年5月22日
    00
  • 一文快速回顾 Java 操作数据库的方式-JDBC

    数据库的重要性不言而喻,不管是什么系统,什么应用软件,也不管它们是 Windows 上的应用程序,还是 Web 应用程序,存储(持久化)和查询(检索)数据都是核心的功能。大家学习数据库时,比如 MySQL 这个数据库管理系统,都是在 CLI(Command Line Interface)上操作数据库的,现在,我们看看,在 Java Web 中,我们如何使用 …

    MySQL 2023年4月11日
    00
  • MYSQL SQL查询近7天一个月的数据的操作方法

    要查询MySQL数据库中近7天或一个月的数据,可以使用Date函数和Interval函数来实现。 查询近7天的数据 可以使用以下SQL语句查询近7天的数据: SELECT * FROM tableName WHERE createTime>=DATE_SUB(curdate(),INTERVAL 7 DAY); 其中,tableName是要查询的数据表…

    database 2023年5月22日
    00
  • linux C编程常见的错误总结(必看篇)

    Linux C编程常见的错误总结(必看篇)攻略 前言 C语言是一门常用的编程语言,在Linux系统中也有大量的应用。然而,在编程过程中,常常会遇到各种各样的错误。本篇攻略汇总了Linux C编程中常见的错误,并提供了解决办法。 常见的错误 1. 错误提示:“undefined reference to `main’” 这个错误通常是由于编译器未能在程序中找到…

    database 2023年5月22日
    00
  • MySQL忘记root密码错误号码1045的解决办法

    当我们忘记 MySQL 的 root 密码时,使用 root 账户登陆 MySQL 数据库失败,可能会遇到错误号码为 1045 的错误提示。错误提示信息如下所示: ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO) 这种错误提示意味着在没有提供正…

    database 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部