我正在尝试将Spring IoC与这样的接口一起使用:
public interface ISimpleService<T> { void someOp(T t); T otherOp(); }
Spring可以基于通用类型参数T提供IoC吗?我的意思是这样的:
public class SpringIocTest { @Autowired ISimpleService<Long> longSvc; @Autowired ISimpleService<String> strSvc; //... }
当然,上面的例子不起作用:
expected single matching bean but found 2: [serviceLong, serviceString] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:957)
我的问题:是否可以提供对接口或实现类进行最少修改的类似功能?例如,我知道我可以使用@Qualifiers,但我想使事情尽可能简单。
由于擦除,我认为这是不可能的。在进行全自动布线时,我们通常切换到强类型子接口:
public interface LongService extends ISimpleService<Long> {} public interface StringService extends ISimpleService<String> {}
进行此切换后,我们发现我们实际上非常喜欢此功能,因为它使我们能够更好地进行“查找使用情况”跟踪,而使用泛型接口则有些松懈。