java - 具有动态参数的 Spring-Boot @Bean 生产者

标签 java spring-boot dependency-injection qualifiers

我正在处理一组相似的 Bean,只是在某些属性上有所不同,我想要实现的是只有一个方法来生成这样的 Bean,但可以通过“配置”或自定义一些参数,可能带有自定义 @Qualifier 注释。 这样的事情可能吗?

例如,我想使用这个@Annotation 作为 Autowiring 不同@Beans 的限定符:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface CustomQualifier {    
    int length();
    int height();
}

然后只有一个方法可以通过读取注释的参数来生成不同的@Beans。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DynamicReportsConfiguration {

    @Bean
    @CustomQualifier // Here I do not want to set the fields' value
    public MyBean produceBean() {
        // TODO Read the fields of the @CustomQualifier
        int length;
        int height;

        return new MyBean(length, height);
    }
}

然后我只想指定注入(inject)点上的字段,例如:

@Autowired
@CustomQualifier(length=10, height=50)
private MyBean myBean;

我怎样才能实现这样的目标,而不必为每个特定的高度和长度值组合创建一个方法?

最佳答案

Spring不支持这样的东西。 其实spring是用反射来注入(inject)依赖的。 spring 引擎不知道你的自定义注解。

关于java - 具有动态参数的 Spring-Boot @Bean 生产者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57905578/

相关文章:

java - Google 电子表格 API,400 错误错误请求 : unable to parse range

java - 创建具有名称的 bean 时出错,应用程序运行失败。 Spring Boot

java - 在 spring 中防止来自 Controller 的 dao 调用

php - Laravel 5 目标不可实例化

java - 将 EVENT 范围的 bean 注入(inject)到 CONVERSATION/SESSION 范围的 bean 中是否更安全?

c# - 如何使用自定义 HttpClientHandler 配置对依赖于 HttpClient 的类进行单元测试/依赖项注入(inject)

java - 以这种方式使用伴随对象(静态)可能是一个很好的例子吗?

java - Spring 中的表单导航困惑

java - 如何在流中使用两个过滤器进行不同的转换

java - Spring Boot 中的 Hibernate JPA/CrudRepository 实体锁定