使用类名称使用单一范围注入值

时间:2015-09-30 07:05:35

标签: java spring caching dependency-injection

我是春天新手。我的班级图就像这样

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{}

默认情况下,spring bean的范围是singleton。所以我想创建缓存管理服务。通过反射,我将获得扩展Cache类的所有类,但是如果我将使用" new"来实例化它们,则所有缓存都具有单例范围。我正在获得新的对象,但是其他的将获得不同的对象,而其他类就像下面这样注入它。

Class A {
  @inject
  Country c
}

Class B {
  @inject
  Attr attr
}

每次注射都使用相同的缓存,所以如果我使用" new"刷新不会反映给他们。

P.S。 - 主要目标是创建一个类,它将知道扩展Cache类的所有类,并给出一个名称(来自Cache类的getName()函数),它将刷新相应的缓存。如果spring具有足够好的功能。

1 个答案:

答案 0 :(得分:0)

“主要目标是创建一个类,它将知道扩展Cache类的所有类并给出一个名称(来自Cache类的getName()函数)”

只需使用@Autowired或@Inject

创建一个集合
@Autowired
List<Cache>
相关问题