当前位置: 首页 > 知识库问答 >
问题:

条件spring bean创建

席言
2023-03-14

我有一个关于Spring注释配置的问题。我有一颗豆子:

@Bean 
public ObservationWebSocketClient observationWebSocketClient(){
    log.info("creating web socket connection...");
    return new ObservationWebSocketClient();
}
@Autowired
Environment env;
createWebsocket=true/false

共有1个答案

杜阳泽
2023-03-14

虽然我没有使用过这个功能,但似乎可以通过Spring4的@condition注释来实现。

首先,创建一个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("createWebSocket"));
    }
}

然后对bean进行注释:

@Bean
@Conditional(MyCondition.class)
public ObservationWebSocketClient observationWebSocketClient(){
    log.info("creating web socket connection...");
    return new ObservationWebSocketClient();
}

编辑spring-boot注释@conditionalonproperty已经实现了这一点;用于评估它的条件的源代码可以在这里的github上为感兴趣的人提供。如果您发现自己经常需要这种功能,那么最好使用类似的实现,而不是进行大量的自定义condition实现。

 类似资料:
  • 有没有办法在刷新Spring上下文后找出bean创建顺序(或至少依赖顺序)? 只要简单的bean定义顺序就可以了。我不想要他们注册的顺序。我想要创建它们的顺序(依赖关系树)

  • 问题内容: 我有一个关于Eclipse,Wicket,Spring,Hibernate的项目。一切正常,除了:当我尝试 服务变量为空?在我使用此构造的任何其他地方,“ service”都不为null且运行良好。请帮我解决这个问题。 问题答案: @SpringBean仅在Component的任何子类中起作用。 您需要在构造函数中执行以下操作 小门1.4 小门1.5+ 参见“通用IDataProvid

  • 我想制作一个AngularJS Spring MVC Hibernate MySQL应用程序。我不知道如何配置SpringBean,这样我就可以对我的存储库和实体类使用自动连接的注释。 pom.xml依赖: 实体类: 的存储库: 的控制器: 配置类:

  • 问题内容: 我有下面的数据框: 我想向数据框添加另一列(或生成一系列),该列与数据框的长度相同,如果Set =’Z’则将颜色设置为green ,如果. 最好的方法是什么? 问题答案: 如果你只有两种选择: 例如, 输出 如果你有两个以上的条件,请使用。例如,如果你想成为 when otherwise when otherwise when otherwise , 然后使用 输出:

  • 我有一个这样的数据集 我想创建列(visit_no)。每当间隙大于1时,我们需要在接下来的行中将visit_no值增加1,直到我们找到另一个值,它将保持不变 这是数据框架

  • 做这件事最好的方法是什么?