将Guice组件集成到Spring应用程序中
我们有一个基于Spring框架的应用程序,需要集成一个使用GoogleGuice构建的组件 有谁能给我们一些建议如何做到这一点 我们遇到了以下链接,这些链接展示了如何将Spring集成到Guice中,但我们需要的是另一种方式:将Guice组件集成到Spring应用程序中,spring,guice,Spring,Guice,我们有一个基于Spring框架的应用程序,需要集成一个使用GoogleGuice构建的组件 有谁能给我们一些建议如何做到这一点 我们遇到了以下链接,这些链接展示了如何将Spring集成到Guice中,但我们需要的是另一种方式: 任何帮助都将受到Spring和Guice支持的感谢。如果您需要的Guice组件是使用jsr330注释定义的,或者您可以访问代码并更改注释,那么您应该能够在Spring管理的bean中使用它 请参见和查看。具体请参见有关的信息。我没有尝试过,因为它没有发布,但我已经考虑
任何帮助都将受到Spring和Guice支持的感谢。如果您需要的Guice组件是使用jsr330注释定义的,或者您可以访问代码并更改注释,那么您应该能够在Spring管理的bean中使用它 请参见和查看。具体请参见有关的信息。我没有尝试过,因为它没有发布,但我已经考虑复制一些代码 我在粘贴中这样做的方式是,让Guice为Guice组件提供动力,并直接使用Guice在Spring的Java配置(
@Bean
)中检索它们,或者使用讨厌的静态服务定位器模式(即从Guice动态检索组件的静态方法)
不管采用哪种方法,我遇到的最大问题是,由于存在相互竞争的生命周期(理论上,SpringGuice项目将解决这一问题),所以我首先要弄清楚什么是boots 将guice组件集成到spring boot中不需要特殊的框架或依赖项 标准启动应用程序
@SpringBootApplication
public class App {
SpringApplication.run(App.class, appArgs);
}
Guice模块配置
@Configuration
public class GuiceBeanConfig {
private final Injector injector;
// guice modules are initialized before the spring context completes
{
injector = Guice.createInjector(
new MyModuleA(),
new MyModuleB()
);
}
/**
* Option1: can expose injector as a Spring Bean.
*/
@Bean
public Injector injector() {
return injector;
}
/**
* Option2: expose specific component as a Spring Bean.
*/
@Bean
public MyServiceA serviceA() {
return injector.getInstance(ServiceA.class);
}
}
将服务组件作为常规SpringBean自动连接。
- 选项1:自动连接guice注入器并从中访问任何bean
@Service public class MySpringService { private final ServiceA serviceA; MySpringService (Injector i){ serviceA = injector.getInstance(ServiceA.class) } public void callServiceA() { serviceA.doSomething(); } }
- 选项2:autowire特定bean
@Service public class MySpringService { private final ServiceA serviceA; MySpringService (ServiceA s){ serviceA = s; } public void callServiceA() { serviceA.doSomething(); } }
选项1每次创建MySpringService的新实例时,都会创建ServiceA的实例。
选项2将ServiceA公开为作用域为单例的bean Singleton vs Prototype:如果组件/服务是线程安全的,不保持状态,那么更好的选择是Singleton。性能更好,GC的工作量更少 注2:
如果进行构造函数注入,Spring boot不需要使用@Autowire注释。这不是很有帮助。那么所有这些多绑定器、提供者等呢。?