Spring基础篇:Spring的“条件装配”需要怎么操作

简介: Spring的“条件装配”需要怎么操作

问题引出

这一篇文章,讲了一下如何编写“模块装配”,使得一组bean能被一个注解管理:Spring基础篇:Spring的自定义“模块装配”的步骤 - 掘金 (juejin.cn)

这里会产生一个问题,如果说这一组bean中,有某个类是不需要被管理的呢?简单来说就是:我还是想通过“模块装配”的方式管理一堆bean,但其中有一个bean是需要被排除的。

哈~这个时候就有人和我想的一样了,既然这个bean要被排除了!那当初不要把它加进“模块装配”不就好了!嗯嗯有道理(当然不是)。请看下面这个例子:

我用模块装配的一组bean,同时这组bean中有我写的工具类,这个工具类只是在我代码开发调试的过程起到作用了,一旦到生产环境了,就不需要这个bean了。这就需要用到“条件装配了”。

条件装配的实现步骤

有两个注解的方式可以实现条件装配,我们先了解一下:

  • @Profile注解
  • @Conditional注解

这两个注解的放的位置都是放在这个:在特定条件下,不需要装入“模块装配”的bean上。

@Profille
bean

// or

@Conditional
bean

@Profile如何实现条件装配

假设一个配置类中有一个bean负责的是数据库源。我们可以在发开时选择dev环境的数据库,在部署的时候选择beta环境的数据库,只需要在对应的类上加上@Profile注解,注解中的value值填上相应的标识字符串即可。

@Configuration
public class AssemblyConfig {
    @Bean
    @Profile("dev")
    public DataSource DevDataSource(){
        //...基本配置
        return new DataSource();
    }
    
    @Bean
    @Profile("beta")
    public DataSource BetaDataSource(){
        //...基本配置
        return new DataSource();
    }
}

配置完毕后,我们可以加上vm-options在IDEA中测试,在JAR包运行时也加上相应的命令即可。
-Dspring.profiles.active=dev选择dev环境。

image.png

@Conditional如何实现条件装配

使用@Conditional可以实现更细的条件装配,可手动编写配置的条件。这里分两个步骤快速了解一下。

  1. 在对应的类上加上@Conditional注解。

但是现在@Conditional()里面需要我们填入条件内容,编写类实现Condition接口。

@Bean
@Conditional()
public Dog dog(){
    return new Dog();
}
  1. 实现Condition接口编写条件。

这里会让我们重写matches方法,它的核心是方法体的内容判断,如果是true则上面的Dog就会满足条件被装配;如果返回的是false则不会装配Dog

public class ExistCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;
    }
}
  1. 把条件的类放入@Condition()中即可
@Conditional(ExistCondition.class)
目录
相关文章
|
8月前
|
NoSQL Java Redis
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
120 0
|
8月前
|
XML Java 数据库
【Spring】通过JdbcTemplate实现CRUD操作
【Spring】通过JdbcTemplate实现CRUD操作
83 0
|
2月前
|
消息中间件 Java 数据库
解密Spring Boot:深入理解条件装配与条件注解
Spring Boot中的条件装配与条件注解提供了强大的工具,使得应用程序可以根据不同的条件动态装配Bean,从而实现灵活的配置和管理。通过合理使用这些条件注解,开发者可以根据实际需求动态调整应用的行为,提升代码的可维护性和可扩展性。希望本文能够帮助你深入理解Spring Boot中的条件装配与条件注解,在实际开发中更好地应用这些功能。
40 2
|
7月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
75 2
|
7月前
|
Java Spring 容器
在 Spring Boot 中,条件装配(Conditional Configuration)和条件注解(Conditional Annotations)
在 Spring Boot 中,条件装配(Conditional Configuration)和条件注解(Conditional Annotations)
139 1
|
7月前
|
Java 数据库连接 数据库
Spring日志完结篇,MyBatis操作数据库(入门)
Spring日志完结篇,MyBatis操作数据库(入门)
|
7月前
|
Java Spring
spring练习32-删除用户操作
spring练习32-删除用户操作
|
存储 运维 监控
如何在 Spring Boot 中设计和实现业务操作日志功能?
如何在 Spring Boot 中设计和实现业务操作日志功能?
1897 4
|
Java Nacos Sentinel
牛逼!这份神仙级Spring Cloud Alibaba全套笔记,几乎涵盖了所有操作
Spring Cloud 和微服务的重要性大家都知道了,Spring Cloud 现在已经成了微服务事实上的标准框架,也是 Java 程序员必须掌握的技术系列之一。
|
8月前
|
NoSQL Java 网络安全
在spring中操作Redis
在spring中操作Redis
71 0