Весенний кеш загрузки не поддерживает kotlin?

Я пытаюсь заменить некоторый Java-код на kotlin.

Например, jpa или cache.

Класс «Пуск»:

@EnableAsync @EnableCaching @EnableSwagger2 @SpringBootApplication open class Application fun main(args: Array<String>) { SpringApplication.run(Application::class.java) } 

Простой контроллер:

 @RestController class CacheController { @Autowired private lateinit var cache: CacheService @PutMapping("{id}") fun save(@PathVariable id: Long) { cache.save(id) } } 

CacheService:

 @Component @CacheConfig(cacheNames = arrayOf("longCacheManager"), cacheManager = "longCacheManager") open class CacheService { @Cacheable(key = "#id") fun save(id: Long): Long { return id } } 

cacheManager:

 @Configuration open class CacheConfig { @Autowired private lateinit var redisConnectionFactory: RedisConnectionFactory @Bean @Qualifier("longCacheManager") open fun longCacheManager(): CacheManager { val redisTemplate = StringRedisTemplate(redisConnectionFactory) redisTemplate.valueSerializer = GenericToStringSerializer(Long::class.java) val cacheManager = RedisCacheManager(redisTemplate) cacheManager.setUsePrefix(true) return cacheManager } } 

Я могу подтвердить параметр id, введенный в метод метода CacheService, но после того, как я освобожу PutMethod, в redis нет ничего.

Когда я пишу cacheServie с java, как это, redis будет сохранять то, что я хочу.

Служба кеша Java:

 @Component @CacheConfig(cacheNames = "longCacheManager", cacheManager = "longCacheManager") public class JavaCacheService { @Cacheable(key = "#id") public Long save(Long id) { return id; } } 

Я также прочитал статью вроде этого: https://pathtogeek.com/spring-boot-caching-with-kotlin

Моя SpringBootVersion – 1.5.3.RELEASE и kotlinVersion – 1.1.3-2

Спасибо всем, я исправлю это, сделав метод кеша открытым

 @Component @CacheConfig(cacheNames = arrayOf("longCacheManager"), cacheManager = "longCacheManager") open class CacheService { @Cacheable(key = "#id.toString()") open fun save(id: Long): Long { return id } } 

Spring создавал прокси с cglib.

Он должен обязательно наследовать классы и методы.

Но kotlin default – это final class и метод, который без ключевого слова open .