如何在另一个具有默认配置文件的 bean 中使用 spring 配置文件 bean?
How to use a spring profile bean in another bean with default profile?
我在"dev"配置文件下有一个bean:
@Bean(name="internalDL")
public Map<Client, List<String>> internalDistributionLists() {
Map<Client, List<String>> distributionLists = new HashMap<Client, List<String>>();
distributionLists.put(Client.DL_NAME, Arrays.asList("example@blah.com"));
return distributionLists;
}
我需要在另一个 bean 中使用这个 bean:
@Autowired
@Qualifier("internalDL")
private Map<String, List<String>> internalMailingList;
@Bean(name="internalMailingDetails")
public Map<Client, MailingDetails> internalMailingDetails() {
Map<Client, MailingDetails> internalMailingDetails = new HashMap<Client, MailingDetails>();
MailingDetails details = new MailingDetails();
details.setMailingList(internalMailingList.get(Client.DL_NAME));
details.setTemplateSubject("someTemplate");
details.setTemplateBody("someTemplate");
internalMailingDetails.put(Client.DL_NAME, details);
return internalMailingDetails;
}
现在邮件模板在所有环境中都是相同的,所以我没有将它放在标有特定配置文件的配置中。
我尝试通过初始化 ApplicationContextInitializer<ConfigurableApplicationContext>
class:
来初始化配置文件
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
applicationContext.getEnvironment().setActiveProfiles("dev");
}
并将其作为上下文参数:
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
None 其中似乎有效。它不断抛出未找到 bean 异常。
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.util.Map com.fmr.bpo.asyncprocessingframework.invocator.wiring.configuration.pojo.common.RootConfig.internalMailingList
感谢您的帮助。
@Autowired 不适用于集合 bean。使用 @Resource
而不是 @Autowire
@Resource
private Map<String, List<String>> internalMailingList;
并参考beans-property-is-not-setting-from-utillist-object
如果您正在使用 Spring 4.x 稍后查看 spring-framework-4-0-and-java-generics
我在"dev"配置文件下有一个bean:
@Bean(name="internalDL")
public Map<Client, List<String>> internalDistributionLists() {
Map<Client, List<String>> distributionLists = new HashMap<Client, List<String>>();
distributionLists.put(Client.DL_NAME, Arrays.asList("example@blah.com"));
return distributionLists;
}
我需要在另一个 bean 中使用这个 bean:
@Autowired
@Qualifier("internalDL")
private Map<String, List<String>> internalMailingList;
@Bean(name="internalMailingDetails")
public Map<Client, MailingDetails> internalMailingDetails() {
Map<Client, MailingDetails> internalMailingDetails = new HashMap<Client, MailingDetails>();
MailingDetails details = new MailingDetails();
details.setMailingList(internalMailingList.get(Client.DL_NAME));
details.setTemplateSubject("someTemplate");
details.setTemplateBody("someTemplate");
internalMailingDetails.put(Client.DL_NAME, details);
return internalMailingDetails;
}
现在邮件模板在所有环境中都是相同的,所以我没有将它放在标有特定配置文件的配置中。
我尝试通过初始化 ApplicationContextInitializer<ConfigurableApplicationContext>
class:
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
applicationContext.getEnvironment().setActiveProfiles("dev");
}
并将其作为上下文参数:
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
None 其中似乎有效。它不断抛出未找到 bean 异常。
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.util.Map com.fmr.bpo.asyncprocessingframework.invocator.wiring.configuration.pojo.common.RootConfig.internalMailingList
感谢您的帮助。
@Autowired 不适用于集合 bean。使用 @Resource
而不是 @Autowire
@Resource
private Map<String, List<String>> internalMailingList;
并参考beans-property-is-not-setting-from-utillist-object
如果您正在使用 Spring 4.x 稍后查看 spring-framework-4-0-and-java-generics