我有一个场景,在服务层中有@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实际上从来没有被这两种方法嘲笑过。
有人知道我该怎么做吗?上述解决方案是否也会产生循环依赖?
暂无答案!
目前还没有任何答案,快来回答吧!