在Guice 2或3中,存在此处描述的所谓的辅助/部分注入。这样,Guice可以为我的对象综合工厂实现(实现我的接口),并且一些构造函数参数由Guice注入,而某些则是从上下文中提供的。
Spring是否可能以及如何做同样的事情?
以下正是我所要求的。虽然,它没有综合工厂的实现,但它足够好,因为工厂可以访问 注入上下文, 因此可以在构造期间使用其他 bean
(可注入工件)。它使用基于Java的@Configuration
而不是XML,但是它也可以与XML一起使用。
工厂界面:
public interface Robot {
}
// Implementation of this is to be injected by the IoC in the Robot instances
public interface Brain {
String think();
}
public class RobotImpl implements Robot {
private final String name_;
private final Brain brain_;
@Inject
public RobotImpl(String name, Brain brain) {
name_ = name;
brain_ = brain;
}
public String toString() {
return "RobotImpl [name_=" + name_ + "] thinks about " + brain_.think();
}
}
public class RobotBrain implements Brain {
public String think() {
return "an idea";
}
}
// The assisted factory type
public interface RobotFactory {
Robot newRobot(String name);
}
//这是Spring配置,显示了如何进行辅助注射
@Configuration
class RobotConfig {
@Bean @Scope(SCOPE_PROTOTYPE)
public RobotFactory robotFactory() {
return new RobotFactory() {
@Override
public Robot newRobot(String name) {
return new RobotImpl(name, r2dxBrain());
}
};
}
@Bean @Scope(SCOPE_PROTOTYPE)
public Brain r2dxBrain() {
return new RobotBrain();
}
}
测试代码:
public class RobotTest {
@Test
public void t1() throws Exception {
ApplicationContext ctx = new
AnnotationConfigApplicationContext(RobotConfig.class);
RobotFactory rf = ctx.getBean(RobotFactory.class);
assertThat(rf.newRobot("R2D2").toString(),
equalTo("RobotImpl [name_=R2D2] thins about an idea"));
}
}
这完全可以实现Guice的功能。棘手的区别是Scope
。Spring的默认范围是,Singleton
而Guice 的默认范围不是(它是原型)。
问题内容: Spring Profile批注允许您选择配置文件。但是,如果您阅读文档,它仅允许您使用OR操作选择多个配置文件。如果指定@Profile(“ A”,“ B”),则在配置文件A或配置文件B处于活动状态时,您的bean都将启动。 我们的用例有所不同,我们要支持多种配置的TEST和PROD版本。因此,有时我们只想在概要文件TEST和CONFIG1都处于活动状态时才自动装配bean。 Spr
我是Guice的新手,所以我试图理解AssistedInject。我有一个非常简单的项目: 我要注入的类: 带辅助注射的类别: 工厂 主类: 但它仍然不起作用,我不明白,我错在哪里?
我正在使用Guice Assisted Inject库为我建立一个工厂。我目前的设置如下: 这迫使我使用< code > factory . create controller(first,factory . create second(first))显式创建一个< code>SecondDep。是否可以更改我的绑定,这样我就可以简单地执行< code > factory . create con
为程序制作辅助功能是很重要的。在这里,我们很高兴地向你们介绍Devtron和Spectron。这两个新功能有机会使开发者们让他们的应用程序更加可用。 Electron 应用中有关辅助功能的开发和网站是相似的,因为两者最终使用的都是HTML. 然而, 对于Electron应用, 你不能使用在线的辅助功能审查者, 因为你的应用没有一个URL可以提供给审查者. 然而这些新功能将这些审查工具带到您的Ele
为程序制作辅助功能是很重要的。在这里,我们很高兴地向你们介绍Devtron和Spectron。这两个新功能有机会使开发者们让他们的应用程序更加可用。 Electron 应用中有关辅助功能的开发和网站是相似的,因为两者最终使用的都是HTML. 然而, 对于Electron应用, 你不能使用在线的辅助功能审查者, 因为你的应用没有一个URL可以提供给审查者. 这些功能将会提供一些审查工具给你的Elec
问题内容: 使用Google Guice或Gin,我可以指定不受依赖项注入框架控制的参数: 辅助参数是在创建实例时指定的。 SomeClassA的实例是从对象图中获取的,而SomeClassB的实例是从运行时的调用者中获取的。 在Dagger中有类似的方法吗? 问题答案: 因为工厂是一种单独的样板,可以进行优化(请参阅此处的邮件列表讨论),所以Dagger将其留给了姊妹项目AutoFactory。