Caching 使用@Cacheable时,Spring Boot不会自动初始化记录器
我看到一种奇怪的行为。每当我使用以下注释方法时:Caching 使用@Cacheable时,Spring Boot不会自动初始化记录器,caching,spring-boot,logging,kotlin,Caching,Spring Boot,Logging,Kotlin,我看到一种奇怪的行为。每当我使用以下注释方法时: @Cacheable("contacts") (主类用@EnableCaching注释) 在任何方法中,我将此logger变量设置为null: private val logger = LoggerFactory.getLogger(ProductCriteria::class.java) 如果我把它拿出来,它就不再是空的了。 从我的调试来看,cglib似乎正在创建一些类代理来提供缓存。但是,该代理并没有像看上去那样正确初始化 这是出于设计、
@Cacheable("contacts")
(主类用@EnableCaching
注释)
在任何方法中,我将此logger
变量设置为null
:
private val logger = LoggerFactory.getLogger(ProductCriteria::class.java)
如果我把它拿出来,它就不再是空的了。
从我的调试来看,cglib似乎正在创建一些类代理来提供缓存。但是,该代理并没有像看上去那样正确初始化
这是出于设计、限制还是我遗漏了什么?它已正确初始化。代理的所有字段都未初始化,实际对象的字段将被初始化(至少在常规Java中,不确定这是否会随着Kotlin的加入而改变)。当使用
final
方法(我相信kotlin的默认方法)时,这是有问题的,因为final方法没有代理(这同样适用于其他非public
方法)。感谢您的解释。有解决办法吗?为什么会有解决办法?这是预期的行为…那么我如何在代理类中进行日志记录呢?代理仅用于应用建议,日志记录应该仍然有效。如果没有,则意味着您有final
方法(基本上不允许使用基于类的代理)。使用基于接口的代理或删除Kotlin中的final
关键字(即open-fun
),该关键字已正确初始化。代理的所有字段都未初始化,实际对象的字段将被初始化(至少在常规Java中,不确定这是否会随着Kotlin的加入而改变)。当使用final
方法(我相信kotlin的默认方法)时,这是有问题的,因为final方法没有代理(这同样适用于其他非public
方法)。感谢您的解释。有解决办法吗?为什么会有解决办法?这是预期的行为…那么我如何在代理类中进行日志记录呢?代理仅用于应用建议,日志记录应该仍然有效。如果没有,则意味着您有final
方法(基本上不允许使用基于类的代理)。使用基于接口的代理或删除final
关键字(即Kotlin中的open fun
)。