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

如何使用注释在@Scope("prototype") bean中指定特定于实例的@Value?

公冶渝
2023-03-14

我有一个bean,它包含同一个组件的两个自动连接的实例:

@Component
public SomeBean {
    @Autowired
    private SomeOtherBean someOtherBean1;
    @Autowired
    private SomeOtherBean someOtherBean2;
    ...
}

SomeOtherBean有一个原型范围:

@Component
@Scope("prototype")
public SomeOtherBean {
    @Value("...")
    private String configurable;
}

每个自动加载的某个其他豆的可配置值需要不同,并将通过属性占位符提供:

configurable.1=foo
configurable.2=bar

理想情况下,我希望使用注释来指定可配置属性的值。

通过XML执行此操作很容易,但我想知道这是否是

  • a) 无法使用注释或
  • b) 如何做到这一点。

共有1个答案

卫琛
2023-03-14

也许这与您的想法略有不同,但您可以使用基于@Configuration的方法轻松实现,例如:

@Configuration
public class Config {

    @Bean
    @Scope("prototype")
    public SomeOtherBean someOtherBean1(@Value("${configurable.1}") String value) {
        SomeOtherBean bean = new SomeOtherBean();
        bean.setConfigurable(value);
        return bean;
    }

    @Bean
    @Scope("prototype")
    public SomeOtherBean someOtherBean2(@Value("${configurable.2}") String value) {
        // etc...
    }
}
 类似资料:
  • 我已经使用Spring几十年了,但以前从未遇到过这个用例。 是否有方法注入所有带特定注释的bean,例如,所有带服务的bean或所有带自定义注释的bean? 我唯一的想法是注入上下文,获取所有bean并手动过滤。如果这是唯一的方法,Spring是否公开了一种递归扫描类层次结构以查找(元)注释的方法(因为大多数Spring注释都可以用作元注释)?

  • 我有这样的拓扑: 拓扑中最后提到的源是每个应用程序实例的特定主题。我希望该主题仅由该实例处理。此主题的数据由前一个处理器推送,基于哪个实例必须处理该消息。 但是一旦流启动,它会尝试将实例特定的主题分区也分配给其他实例。我们可以在Kafka流中实现这个要求吗? 我希望一个主题仅由特定实例处理。

  • 问题内容: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 问题答案: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 否。如果要定义表和列注释,最好的选择是在生成的DDL中根据事实进行操作,然后再对数据库执行操作。

  • 此外,如果spring bean中有注释,那么是否有一种方法可以验证注入的bean是否具有正确的作用域。我的假设是,如果您将原型作用域bean注入到单例作用域bean中,很可能这不是您想要的。虽然在某些用例中,这是开发人员想要的,但在我们的案例中,到目前为止,这主要是开发人员的错误。

  • 在我们的组织中,我们有一些微服务和许多库。 有些库定义的“public”类不用于公共用途-仅在多个包中的库内部(因此不能是包私有的) 我想添加一些类似于Kotlin的“内部”修饰符的内容—一个checkstyle规则/注释处理器/测试组件,用于验证使用者应用程序是否不导入这些类。 例如,我将它们标记为@ForInternalUsageOnly或放入包com.ourorg.mylib.interna