是否可以在Spring Framework中使用Java配置编写类似Guice的模块?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了是否可以在Spring Framework中使用Java配置编写类似Guice的模块?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1635字,纯文字阅读大概需要3分钟。
内容图文
我想知道是否存在某种折衷方案,允许您模仿/利用Google Guice风格的EDSL编写模块的方式,这些模块将接口绑定到Spring中的实现.
例如,假设我有一个Google Guice模块,如下所示:
public class BillingModule extends AbstractModule {
protected void configure() {
bind(BillingService.class).to(RealBillingService.class);
}
}
这将BillingService接口绑定到RealBillingService实现.
我认为我可以使用Spring的Java配置类的一种方式是这样的
@Configuration
public class BillingConfiguration {
@Bean
public BillingService getRealBillingService() {
return new RealBillingService();
}
}
我想知道是否有更好的方法来做到这一点,或者如果这种情况随着日益复杂的使用而中断.
我真的很喜欢Google Guice以及它如何进行依赖注入,但这就是它的全部功能. Spring做得更多(是的,它的依赖注入机制仍然不像Guice那样“很好”)但无可否认有一些我们想要利用的很棒的项目,比如Spring Data,Spring Data REST等,它们不需要写了大量的样板代码.
解决方法:
这样做的方法是使用@Profile包含同一接口的不同实现.
一个简单的例子是DataSource.然而,这可以容易地扩展到具有多个实现的任何其他接口.
举个例子:
@Configuration
public class LocalDataConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:com/bank/config/sql/schema.sql")
.addScript("classpath:com/bank/config/sql/test-data.sql")
.build();
}
}
然后用于生产:
@Configuration
@Profile("production")
public class JndiDataConfig {
@Bean
public DataSource dataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
}
}
然后,您需要做的就是在启动应用程序上下文时声明哪些配置文件处于活动状态,并在需要的地方声明@Inject / @ Autowire DataSource.
内容总结
以上是互联网集市为您收集整理的是否可以在Spring Framework中使用Java配置编写类似Guice的模块?全部内容,希望文章能够帮你解决是否可以在Spring Framework中使用Java配置编写类似Guice的模块?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。