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);
}
Run Code Online (Sandbox Code Playgroud)
}
这里定义了绑定:
public class MyModule implements Module {
@Override
public void configure(Binder g) {
g.bind(MyProxy.class).toProvider(MyProxyProvider.class);
}
Run Code Online (Sandbox Code Playgroud)
}
最后,我的目标是使用@Autowired代理对象,如下所示:
public class ConnectionTest {
@Autowired
MyProxy proxy;
Run Code Online (Sandbox Code Playgroud)
}
另请注意,MyProxy类在外部jar文件中无法修改.
相当于Providerguice的是FactoryBeanSpring.
从文档:
FactoryBean接口是Spring IoC容器实例化逻辑的可插拔点.如果您有更复杂的初始化代码,这些代码在Java中更好地表达,而不是(可能)冗长的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;
}
}
Run Code Online (Sandbox Code Playgroud)
当您拥有外部库和复杂对象创建时,这是一种很好的方法,可以避免长XML配置来设置bean.
为了在您的上下文中使用它,您可以在上下文XML中将其作为普通bean提供,如:
...
<bean id="myClass" class="foo.bar.MyFactoryBean" />
...
Run Code Online (Sandbox Code Playgroud)
但是,如果你的bean很容易被实例化(没有很多依赖项),你可以直接在上下文XML上设置它,如:
<bean id="myClass" class="foo.bar.MyClassImplementation" />
Run Code Online (Sandbox Code Playgroud)
替代
如果您使用Spring 3,您可以编写一个配置类(带注释的类@Configuration),如此处所述.通过这种方法,您可以执行以下操作:
@Configuration
public class MyConfiguration {
@Bean
public MyClassInterface getMyClass() {
return new MyClassImplementation();
}
}
Run Code Online (Sandbox Code Playgroud)
这会将您的实例添加到spring上下文中,并让它在其他类中自动装配.但是需要一些配置,并且根据提供的文档很容易.
| 归档时间: |
|
| 查看次数: |
5600 次 |
| 最近记录: |