Java 使用类名将值注入singleton作用域

Java 使用类名将值注入singleton作用域,java,spring,caching,dependency-injection,Java,Spring,Caching,Dependency Injection,我是春天的新手。我的类图是这样的 public abstract class Cache{ refreshCache() { clearCache(); createCache(); } clearCache(); createCache(); getName(); } @Component @Scope("singleton") @Qualifier("category") class Category extends Cach

我是春天的新手。我的类图是这样的

public abstract class Cache{
    refreshCache() {
      clearCache();
      createCache();
    }
    clearCache();
    createCache();
    getName();
}

@Component
@Scope("singleton")
@Qualifier("category")
class Category extends Cache implements ICategory{}

@Component
@Scope("singleton")
@Qualifier("attr")
class Attr extends Cache implements IAttr{}

@Component
@Scope("singleton")
@Qualifier("country")
class Country extends Cache implements ICountry{}
默认情况下,Springbean的作用域是单例的。所以我想创建缓存管理服务。通过反射,我将得到所有扩展缓存类的类,但是如果我用“
new
”实例化它们,那么所有缓存都是单例作用域的。我得到了新的对象,但是其他的将得到不同的对象,其他的类将像下面一样注入它

Class A {
  @inject
  Country c
}

Class B {
  @inject
  Attr attr
}
每次注入都使用相同的缓存,因此如果我使用“
new
”刷新创建它,则刷新不会反映到它们

注意:主要目标是创建一个类,该类将知道扩展缓存类的所有类,并给出一个名称(
getName()
Function from Cache class)),它将刷新相应的缓存。如果spring有这样的功能就足够了。

“主要目标是创建一个类,该类将知道扩展缓存类的所有类,并给出一个名称(缓存类中的getName()函数)”

只需使用@Autowired或@Inject创建一个集合

@Autowired
List<Cache>
@Autowired
列表

只需添加一个集合
列表
@Autowired
放在上面,您将获得该类型的所有bean实例。你不必到处乱闯。