有一个类有2种通用类型。
public class GenericDao<T, ID extends Serializable> implements IGenericDao<T, ID> {
...
}
我需要从春天开始。
<bean id="myDao" class="com.xxx.yyy.GenericDao">
<qualifier type="com.xxx.yyy.Item"/> <!-- Works for T -->
<!-- Need something for ID -->
...
<property name="name" ref="value"/>
<property name="name" ref="value"/>
</bean>
使用限定符标记我可以处理 T 。我还需要处理 ID 。
答案 0 :(得分:0)
你做错了什么。 @Qualifier as well as <qualifier>
用于注入bean的依赖项。但是你不是在你的bean中注入任何东西而不是在任何地方注入你的bean,你只是试图定义 bean。
在您的情况下,重要的是要了解在xml中您定义 bean将在运行时实例化。在运行时,擦除了泛型类型:type erasure
那就说你可以给Spring提供的泛型类型/提示并不重要,因为在运行时它将完全无用 - 当spring将实例化bean时 - 所有泛型类型信息都将丢失。
如果您有以下内容,那么正确使用限定符标记:
public class MovieRecommender {
@Autowired
@Qualifier("main")
private MovieCatalog movieCatalog;
// ...
}
和xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<bean class="example.SimpleMovieCatalog">
<qualifier value="main"/>
<!-- inject any dependencies required by this bean -->
</bean>
<bean id="movieRecommender" class="example.MovieRecommender"/>
</beans>
对于后备匹配,bean名称被视为默认限定符值。 您可以阅读更多at the spring docs