java-SpringFramework:以编程方式设置bean名称
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-SpringFramework:以编程方式设置bean名称,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2037字,纯文字阅读大概需要3分钟。
内容图文
对于基于springframwork的应用程序,当使用xml声明bean时,可以通过传递唯一值甚至参数来配置bean id,然后在运行时求解该值.
现在,我希望将所有xml配置替换为Java批注.
假设我要创建两个具有不同ID的数据库bean.
bean.xml
<bean id="A.database" class="org.apache.commons.dbcp.BasicDataSource">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="B.database" class="org.apache.commons.dbcp.BasicDataSource">
<!-- collaborators and configuration for this bean go here -->
</bean>
然后,我针对两个应用程序的两个属性文件优化了一个豆的上层代码
bean.xml
<bean id="${appName.database}" class="org.apache.commons.dbcp.BasicDataSource">
<!-- collaborators and configuration for this bean go here -->
</bean>
applicationA.properties
appName.database=A.database
applicationB.properties
appName.database=B.database
整个应用程序由“框架”模块和“应用程序”模块组成,“框架”模块为每个应用程序提供通用的bean,例如数据库Bean,jdbcTemplate Bean,“应用程序”模块为占位符提供属性值并使用唯一ID初始化Bean.因此,即使我同时启动多个应用程序,他们也将从上下文中找到相应的bean.
一般来说,我希望
@Bean(name = "${beanName}")
public ABean getBean() {}
并在应用程序级别解析${beanName}.
解决方法:
通过阅读SpringFramwork文档,我找到了答案:BeanNameGenerator
NameGenerator.class
public class NameGenerator implements BeanNameGenerator{
@Override
public String generateBeanName(BeanDefinition definition,
BeanDefinitionRegistry registry) {
if(definition.getBeanClassName().contains("Toto")) {
return "toto";
}
return return definition.getBeanClassName();
}
}
AppConfiguration.class
@Configuration
@ComponentScan(basePackages = {"com.example.domain"}, nameGenerator = NameGenerator.class)
public class Config {
}
具有@Component的域类
@Component
public class Toto {
private int id;
}
域名为bean的BootApplication:toto
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(
DemoApplication.class, args);
for (String name : ctx.getBeanNamesForType(Toto.class)) {
System.out.println(name);
}
}
}
内容总结
以上是互联网集市为您收集整理的java-SpringFramework:以编程方式设置bean名称全部内容,希望文章能够帮你解决java-SpringFramework:以编程方式设置bean名称所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。