gpt4 book ai didi

java - 如何创建类似于@autowire和@value的自定义注释

转载 作者:行者123 更新时间:2023-11-30 05:48:42 26 4
gpt4 key购买 nike

我们在大型 Spring 应用程序中使用来自外部源的配置值。有没有办法创建自定义注释,以便我们可以“连接”这些配置值提供程序?

我们有一项服务,可以根据当前环境(开发/产品)和当前 channel (网络/移动)等多个变量提供配置值。目前这使用静态代码并且不使用 spring。我搜索了一种使用 spring 注册自定义注释的方法以及该注释的工厂,如下所示:

@MyConfigurationAnnotation(key="my.config.key", fallbackValue= "1")
private MyConfigValueProvider provider;

...
void someMethod(){
int val = provider.get(currentEnvironment, Integer.class);
}

我正在寻找一种方法来注册一些“myConfigAnnotationBeanFactory”到 spring,spring 使用注释中的值进行调用。然后工厂为这个特定的配置键创建一个供应商 bean。

Spring 可能有这样的事情吗?对于@Autowire和@Value,已经有两个注释可以做类似的事情,我只想用spring注册第三种线机制。

最佳答案

@ConfigurationProperties 和提供给 @PropertySource 的工厂类的组合是否有助于实现您想要的效果?

例如

@Configuration
@PropertySource(value="some-value", name="my.config.key", factory=MyConfigFactory.class)
@ConfigurationProperties(prefix="example")
public class ExternalConfig {

private String name = "default";

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

使用工厂类来获取外部属性

public class MyConfigFactory implements PropertySourceFactory {

@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
// The name will be what you set on the @PropertySource 'my.config.key'
// The resource is from the value you set on the @PropertySource
// you could get at that using resource.getResource().getFilename()
Map<String, Object> properties = new HashMap<>();
// set whatever properties needed in the map
properties.put("example.name", name);
return new MapPropertySource("my-external-properties", properties );
}

}

这里我刚刚设置了example.name="my.congig.key"。这将替换外部配置中名称字段的“默认”初始值。

关于java - 如何创建类似于@autowire和@value的自定义注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54368808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com