Java Spring中Guice提供程序的等价性

Java Spring中Guice提供程序的等价性,java,spring,guice,Java,Spring,Guice,Guice的提供者在Spring中的等效性是什么 以下是我需要用Spring替换的Guice代码: public class MyProxyProvider implements Provider<MyProxy> { @Inject Config config; @Override public MyProxy get() { return new MyProxy(httpsclient, config.server, config.user, config.passw

Guice的提供者在Spring中的等效性是什么

以下是我需要用Spring替换的Guice代码:

public class MyProxyProvider implements Provider<MyProxy> {

@Inject
Config config;

@Override
public MyProxy get() {
    return new MyProxy(httpsclient, config.server, config.user, config.password, config.version);
}
}

最后,我的目标是对代理对象使用@Autowired,如下所示:

public class ConnectionTest {

@Autowired
MyProxy proxy;
}


还请注意,外部jar文件中的MyProxy类无法修改。

在spring中不使用提供程序,而是将类MyProxy配置为原型。这可以通过使用@Component或@Service或其他类型的原型来注释类来实现。并为您的包启用组件扫描,或者可以在applicationContext.xml中将其配置为原型。与guice的
提供程序
等效的是Spring

从文件中:

FactoryBean接口是Spring的一个可插拔点 IoC容器的实例化逻辑。如果你有复杂的 用Java更好地表示的初始化代码,而不是 (可能)冗长的XML,您可以创建自己的XML FactoryBean,在该类中编写复杂的初始化,然后 然后将自定义FactoryBean插入容器

样本

public class MyFactoryBean implements FactoryBean<MyClassInterface> {

    @Override
    public MyClassInterface getObject() throws Exception {
        return new MyClassImplementation();
    }

    @Override
    public Class<?> getObjectType() {
        return MyClassInterface.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }

}

这将把您的实例添加到spring上下文中,并让它在其他类中自动连接。但是需要进行一些配置,并且遵循提供的文档非常容易。

问题是MyProxy位于extern jar文件中,因此我无法对其进行注释。我将更新我的问题。然后你可以在你的applicationContext.xml wil板条箱中实例化它。例如,你可以在自己的代码中扩展MyProxy,然后自动连接到该文件。3.14相同的文档:“使用applicationContext,除非你有充分的理由不这样做。”FactoryBean主要用于bacword兼容性
FactoryBean
BeanFactory
是两个不同的东西;)<代码>BeanFactory为第3.8节。3@Java-导师。我按照您的示例创建了实现FactoryBean接口的MyFactoryBean类。我还添加了
。我仍然在获取:在类路径资源[test context.xml]中定义了名为“proxy”的bean时出错:bean的实例化失败。您能提供堆栈跟踪吗?此外,请提供您的来源。它的工作!但是,我不得不对bean进行稍微不同的定义:
。谢谢你的提示。
public class MyFactoryBean implements FactoryBean<MyClassInterface> {

    @Override
    public MyClassInterface getObject() throws Exception {
        return new MyClassImplementation();
    }

    @Override
    public Class<?> getObjectType() {
        return MyClassInterface.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }

}
...
<bean id="myClass" class="foo.bar.MyFactoryBean" />
...
<bean id="myClass" class="foo.bar.MyClassImplementation" />
@Configuration
public class MyConfiguration {

    @Bean
    public MyClassInterface getMyClass() {
        return new MyClassImplementation();
    }

}