如何模拟@resource该场景使用@resource来防止从同一bean的另一个方法调用时绕过@cacheable

vecaoik1  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(211)

我有一个场景,在服务层中有@cacheable注解。这个类的一个方法正在调用另一个方法,后者同时具有@cacheable注解。因为我使用的是spring aop,所以每当createsphereclienta调用createsphereclientb时,@cacheable就会被忽略,因为没有代理。我在这里读到了springcache@cacheable—在使用springboot2.2.5时,从同一bean的另一个方法调用并使用@resource时不起作用。
我不想使用aspectj,因为它只发生在一个类中。
@服务公共类cacheablesphereclientfactoryimpl实现sphereclientfactory{

/**
 * 1. Self-autowired reference to proxified bean of this class.
 */
@Resource
private SphereClientFactory self;

@Autowired
public CacheableSphereClientFactoryImpl(CacheablePolicyDao cacheablePolicyDao, UserCustomPolicyDao userCustomPolicyDao,
                                 UserAPI userAPI, PolicyMessages policyMessages,
                                PolicyRepository policyRepository,
                                 Validator validator) {
    this.cacheablePolicyDao = cacheablePolicyDao;
    this.userCustomPolicyDao = userCustomPolicyDao;
    this.userAPI = userAPI;
    this.policyMessages = policyMessages;
    this.policyRepository = policyRepository;
    this.validator = validator;
}

@Override
@Cacheable(sync = true)
public SphereClient createSphereClientA(@Nonnull TenantConfig tenantConfig) {
    // 2. call cached method using self-bean
    return self.createSphereClient(tenantConfig.getSphereClientConfig());
}

@Override
@Cacheable(sync = true)
public SphereClient createSphereClientB(@Nonnull SphereClientConfig clientConfig) {
    return userAPI.createSphereClient(clientConfig);
}
......... //Some more methods

}
代码运行得非常好!。现在我正在为createsphereclienta函数编写junit。我不能嘲笑sphereclientfactory。
我在用

Mockito Version : 3.3.0
   PowerMock Version : 2.0.5

我尝试了各种方法,比如使用下面的一种方法&mockitojunitrunner
@mock sphereclientfactory self或powermock对象并在powermockrunner上运行,但什么都不起作用:(。每次我都会得到nullpointerexception,因为sphereclientfactory实际上从来没有被这两种方法嘲笑过。
有人知道我该怎么做吗?上述解决方案是否也会产生循环依赖?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题