假设您有以下弹簧配置:
@Configuration
public class Config {
@Bean
public SomeBean someBean() {
SomeBean someBean = new SomeBean();
someBean.setVar("foobar");
return someBean;
}
}
然后我可以在其他类中使用此配置,例如通过@Import(Config.class)
导入它。现在,假设您不想对字符串“foobar”进行硬编码,而是将其作为参数传递给该配置。我该怎么办?创建像@FooBarConfiguration(var = "foobar")
这样的自定义注释会很不错。这可能吗?
答案 0 :(得分:1)
@Ben答案是经典且更好的方法。但是,如果您不想使用属性文件,则可以使用@Bean
。每个@Bean
都包含您要注入的值。
完整代码示例:
@SpringBootApplication
public class So49053082Application implements CommandLineRunner {
@Bean
String beanValueFooBar() {
return "fooBar";
}
@Bean
String beanValueBarFoo() {
return "barFoo";
}
private class SomeBean {
private String var;
public void setVar(final String var) {
this.var = var;
}
}
@Configuration
public class Config {
@Bean
public SomeBean someBean(String beanValueBarFoo) {
SomeBean someBean = new SomeBean();
System.out.println(beanValueBarFoo);
someBean.setVar(beanValueBarFoo);
return someBean;
}
}
@Override
public void run(String... args) {
}
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(So49053082Application.class, args);
context.close();
}
}
答案 1 :(得分:0)
考虑使用@Value注释:
@Configuration
public class Config {
@Value("${myParamValue}")
public String myParam;
@Bean
public SomeBean someBean() {
SomeBean someBean = new SomeBean();
someBean.setVar(myParam);
return someBean;
}
}
您需要以某种方式将参数放入环境中:使用OS环境,运行时参数或配置文件的各种技术都符合您的目的。