bog*_*ata 19 java spring guice cdi
在CDI中,您可以使用以下命令定义一个对象,该对象将为您提供特定类型的项目:
@Inject Instance<MyObject> myObjectInstance; //... MyObject myObjectInstance.get();
同样在Guice中你可以做到:
@Inject Provider<MyObject> myObjectInstance; //... MyObject myObjectInstance.get();
我想知道Spring中是否有类似的构造,或者你必须使用它ApplicationContext才能获得引用?
bog*_*ata 15
经过大量的挖掘,我发现Spring支持JSR-330.这个JSR定义了一个简单的API - 整个规范实际上就是这个API - 它标准化了几个依赖注入接口,注释和行为.
与Spring不同FactoryBean,javax.inject.Provider接口不会在获取bean引用时抛出异常.此外,您仍然需要在某个地方定义此FactoryBean(读取XML或@Configuration类,这是次优的).
由于一个错误,在当前的Spring 3.1.1中,javax.inject.Provider 不起作用.它确实工作在Spring 3.1.0.
为了使用它你只需要包含javax.inject jar - 如果你使用maven,你可以:
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Spring会检测到它,从那一刻起你可以简单地:
@Inject
Provider<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();
Run Code Online (Sandbox Code Playgroud)
就像在Guice示例中一样,因为它是相同的API.
尽管我之前对Konstantin发表了评论,但Spring 确实创建了Provider.(我是针对Spring 3.1.1测试它并遇到这个Spring Provider回归问题)
| 归档时间: |
|
| 查看次数: |
4418 次 |
| 最近记录: |