当前位置: 首页 > 面试题库 >

可以有条件地声明spring bean吗?

吴城
2023-03-14
问题内容

有没有一种方法可以有条件地声明Spring bean:

<bean class="path.to.the.class.MyClass" if="${1+2=3}" />

不必使用配置文件,这将很有用。我没有特定的用例,但这是我想到的。


问题答案:

你可以使用@Conditional从spring4或@ConditionalOnProperty从springBoot.。

  1. Using Spring4 (only)
    如果你不使用Spring Boot,这可能会过大。

首先,创建一个Condition类,在其中ConditionContext可以访问Environment

public class MyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context,
                           AnnotatedTypeMetadata metadata) {
        Environment env = context.getEnvironment();
        return null != env
                && "true".equals(env.getProperty("server.host"));
    }
}

然后注释你的bean

@Bean
@Conditional(MyCondition.class)
public ObservationWebSocketClient observationWebSocketClient() {
    //return bean
}

2.使用Spring Boot:

@ConditionalOnProperty(name="server.host", havingValue="localhost")

在你的abcd.properties文件中

server.host=localhost


 类似资料:
  • 我有一些代码使用聚合物属性e <代码> polymer的工作方式是,我不能简单地说<code>force-shorrow=“false”,如果我想禁用该属性,必须将其完全删除。在Angular2中是否有方法有条件地删除整个属性?我似乎找不到关于这个话题的任何信息。我可以使用并重复整个元素,包括属性和不包括属性,但如果可能的话,我宁愿不这样做。谢谢 编辑 - 为什么将此问题标记为重复并关闭?我在有问

  • 问题内容: 在我的Spring-Boot-App中,我想根据(未加载的)spring-profiles有条件地声明一个Bean。 条件: 到目前为止,我的解决方案(有效): 有没有更优雅(更短)的方式来解释这种情况? 特别是我想在这里摆脱Spring Expression Language的使用。 问题答案: 从Spring 5.1.4(Spring Boot 2.1.2中包含)开始,可以在配置文

  • 模块声明定义了模块的依赖关系。如果我使用Maven作为构建工具,这是多余的,因为已经包含了这些(以及更多)信息。基于此,Maven不能为我生成

  • 问题内容: 假设我有一个方法m(),该方法将字符串数组作为参数。有什么方法可以在我打电话时直接声明该数组?即代替: 我可以只用一行代替它,而避免声明一个我永远不会使用的命名变量吗? 问题答案:

  • 我们公司刚刚建立了一个声纳农场。我对我们的代码质量很好奇,想改进。 我有一个代码包含这样的记录器调用: Sonar触发规则squid:S262,仅有条件地调用方法“前提条件”和日志参数不应要求求值。由这两行触发的规则。 关于这件事,我不太清楚到底发生了什么。这个解释不太适合我的用例。Sonar doc提供了以下示例: 我完全理解(调试不会记录在生产中,因此会发生不必要的操作)。但对于信息和错误级别

  • 在Java中,方法的哪个声明是有效的?我们常用,但我想知道的是:方法可以声明为final吗?