我想利用Spring 4.0对通用类型自动装配的支持,但我想避免为每种类型创建明确的具体或匿名类。举个例子,假设我有一个界面:
public interface Cache<T extends Entity>
接口的抽象实现:
public abstract class AbstractCache<T extends Entity> implements Cache<T>
{
@Autowired
private EntityDao<T> dao;
@Autowired
private List<CacheListener<T>> listeners;
...
}
实现实体的实体类A到Z(例如):
public class A implements Entity
public class B implements Entity
...
public class Z implements Entity
有没有办法可以创建Cache<A>
到Cache<Z>
的实例,以便我可以在其他类中自动装配这些泛型类型? E.g。
@Autowire
private Cache<Z> zCache;
我知道我可以通过单独定义每个bean来实现这一目标,例如
@Bean
public Cache<Z> cacheZ() {
return new AbstractCache<Z> () {};
}
但我无法想办法为特定包中的所有Entity类执行此操作。 E.g。
public void registerEntityCaches (BeanFactory beanFactory) {
for (Class<? extends Entity> cls : entityPackage.getAllClasses()) {
beanFactory.registerBean(new AbstractCache<cls>() {});
}
}
这样的事情是可能的,还是我必须单独定义它们?