gpt4 book ai didi

spring - 将构造函数参数与 Spring 缓存一起使用 :annotation-driven

转载 作者:行者123 更新时间:2023-12-05 08:01:11 24 4
gpt4 key购买 nike

当我将 cache:annotation-driven 添加到我的应用程序上下文时,我收到以下异常:

Superclass has no null constructors but no arguments were given

我有一个名为 PersistController 的类,它具有用 @Cachable(..) 注释的方法,我在应用程序上下文中声明一个实例如下:

<!-- The culprit, for whatever reason -->
<cache:annotation-driven />

<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="primaryTest"/>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="secondaryTest"/>
</set>
</property>
</bean>

<!-- The problem began when I started requiring a String in the constructor. -->
<bean id="persistController" class="com.sei.poc.controller.PersistController" >
<constructor-arg> <value>${cache.nextVersionPostfix}</value></constructor-arg>
</bean>

当我删除 cache:annotation-driven 行时,错误消失了,我反而收到一个错误,指示带注释的缓存组件不工作(很明显)。这意味着上面声明的 PersistController 被正确声明,并且 Spring 完全能够调用正确的构造函数、解析属性并将字符串作为参数注入(inject)。

那么为什么我添加cache:annotation-driven时会报错呢?

我相信这与 Spring 使用 @Cacheable(..) 或任何 Spring 缓存注释自动实例化类的实例有关。如果是这种情况,我想知道是否有一种方法可以将我的属性指定为其构造中的参数。

如果我不能为这些类声明构造函数,(如果你知道答案,我会假设你比我更了解 spring-context-flow)将一个 @Autowired @Value(..) 注解允许生成的类检测属性?

感谢大家的阅读。

最佳答案

我找到了问题第二部分的答案,当 spring 使用 cache:annotation-driven< 加载类时,是否解析了 @Value() 注释/strong>.

答案是肯定的,我在我的 PersistController 中添加了以下行,问题已经解决:

@Value("${cache.currentVersionPostfix}")
private String keyPostfix;

我仍然不确定我是否可以在加载了 cache:annotation-driven 的构造函数中提供参数。话虽这么说,但我不会接受这个作为答案,而是接受能回答该问题的答案。

关于spring - 将构造函数参数与 Spring 缓存一起使用 :annotation-driven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15570799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com