动态创建Spring bean,使用参数化类型

时间:2016-01-17 05:35:56

标签: java spring generics

我想利用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>() {});
    }
}

这样的事情是可能的,还是我必须单独定义它们?

0 个答案:

没有答案