2015-09-02 29 views
1

在春季4 @Autowired不工作延伸延伸布局区域类Spring框架4个泛型类依赖自动装配工作不

给予例外

No qualifying bean of type [com.gemstone.gemfire.pdx.PdxInstance] found for dependency [map with value type com.gemstone.gemfire.pdx.PdxInstance]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

它可能是假设的集合注射点。如何做一个工作。即使添加@Qualifier也会出现相同的错误。

+0

请提供相关的代码来复制问题。 –

+1

@Autowired实际上是在工作....但是你的PdxInstance不是一个弹簧管理bean ...你应该发布你的spring配置文件,java类等等以获得帮助 – Pras

回答

2

所以,如果我正确地跟着你(很难知道肯定没有一个代码段),我假设你有这样的事情......

class MyRegion<K, V> extends Region<K, V> { 
    ... 
} 

则...

@Component 
class MyApplicationComponent { 

    @Autowired 
    private MyRegion<?, PdxInstance> region; 

} 

是啊?

所以,问题是,您不能使用@Autowired注入或自动将Region引用连接到应用程序组件中。您必须使用@资源,像这样......

@Component 
class MyApplicationComponent { 

    @Resource(name = "myRegion") 
    private MyRegion<?, PdxInstance> region; 

} 

的原因是,春(不分版本),默认情况下,每当autowires“地图”到一个应用程序组件试图创建所有的映射在Spring ApplicationContext中定义的Spring bean。即bean ID/Name - > bean引用。

因此,考虑到...

<bean id="beanOne" class="example.BeanTypeOne"/> 

<bean id="beanTwo" class="example.BeanTypeTwo"/> 

... 

<bean id="beanN" class="example.BeanTypeN"/> 

你在你的应用程序组件自动连线地图结束了......

@Autowired 
Map<String, Object> beans; 

beans.get("beanOne"); // is object instance of BeanTypeOne 
beans.get("beanTwo"); // is object instance of BeanTypeTwo 
... 
beans.get("beanN"); // is object instance of BeanTypeN 

那么,什么是你的情况发生的是,根据类型(GemFire's)PdxInstance定义的Spring上下文中没有bean。这是您的(自定义)区域中的数据。因此,当它试图分配Spring上下文中的所有bean或自动装配的(自定义)区域时,Sprig将其标识为“映射”,但不能将其他类型的Bean分配给PdxInstance,并将“Generic”类型考虑在内。

因此,总之,使用@Resource自动装载任何GemFire区域,自定义或其他。

此外,我质疑需要“扩展”GemFire地区。也许最好使用包装(“组合”)。

希望这会有所帮助。

干杯!

+0

@Resource does not have generic map autowire so so它的工作 –

相关问题