Guice和(移动到)Spring的比较
有人能给我一些建议吗,如何使用SimpleSpring(w/oBoot)重新编写一些方法? 这里我有一些代码方法: 1。createInjectorGuice和(移动到)Spring的比较,spring,guice,Spring,Guice,有人能给我一些建议吗,如何使用SimpleSpring(w/oBoot)重新编写一些方法? 这里我有一些代码方法: 1。createInjector private Injector injector; someMethod(){ injector = Guice.createInjector(new ExampleClass1(), new ExampleClass2());} 2个设置模块(模块覆盖) setModules(Modules.override(new ExampleClass
private Injector injector;
someMethod(){
injector = Guice.createInjector(new ExampleClass1(), new ExampleClass2());}
2个设置模块(模块覆盖)
setModules(Modules.override(new ExampleClass3()).with(new ExampleClass4()));
//////////////////////////////////////////////////////////////////
public static void setModules(Module... modules) {
initInjector(modules);
}
private static void initInjector(Module... modules) {
injector = Guice.createInjector(modules);
}
}冒着我的回答过于笼统的风险 粗略地说,您可以将Guice模块视为具有@configuration注释的配置类,其中包含@Bean等 Guice注入器可被视为等同于Spring ApplicationContext 例如,如果我们有两个配置文件:
@Configuration
public class ConfigA {
@Bean
ExampleClass1 exampleClass1(){
return new ExampleClass1();
}
@Bean
ExampleClass2 exampleClass2(){
return new ExampleClass2();
}
}
@Configuration
public class ConfigB {
@Bean
ExampleClass1 exampleClass1(){
return new ExampleClass1();
}
@Bean
ExampleClass3 exampleClass2(){
return new ExampleClass3();
}
}
以及您想要作为ExampleClass3替代品的服务ExampleClass4。
您可以使用@Primary注释
public class ExampleClass4 extends ExampleClass3 {
@Override
public String toString() {
return "ExampleClass4{}";
}
}
@Configuration
public class ConfigC {
@Bean
@Primary
ExampleClass3 exampleClass3(){
return new ExampleClass4();
}
}
因此,将应用程序重写为Spring(核心5.2,而非Spring boot)将是:
<>这个重写绑定的技术只会因为ExpLeCass3没有被定义为主,如果它不起作用,你需要考虑一个不同的方法。
有关更多信息:感谢您的回答和示例。看来@Primary将有助于简化这一过程。
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext ap = initAppContext();
overrideBinding(ap);
System.out.println(ap.getBean(ExampleClass3.class));
//prints ExampleClass4{}
}
private static AnnotationConfigApplicationContext initAppContext() {
AnnotationConfigApplicationContext ap = new AnnotationConfigApplicationContext();
ap.register(ConfigA.class, ConfigB.class);
return ap;
}
private static void overrideBinding(AnnotationConfigApplicationContext ap) {
ap.register(ConfigC.class);
ap.refresh();
}
}