Je reçois l'exception suivante lorsque j'ajoute cache:annotation-driven à mon contexte d'application :
Superclass has no null constructors but no arguments were given
J'ai une classe appelée PersistController qui a des méthodes annotées avec @Cachable(..) et je déclare une instance dans le contexte de l'application comme suit :
<!-- 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>
Lorsque je retire le cache:annotation-driven l'erreur disparaît et je reçois à la place une erreur indiquant que les composants de mise en cache annotés ne fonctionnent pas (évidemment). Cela signifie que les PersistController déclaré ci-dessus est déclaré correctement et Spring est tout à fait capable d'appeler le constructeur approprié, de résoudre la propriété et d'injecter la chaîne en tant qu'argument.
Alors pourquoi l'erreur quand j'ajoute cache:annotation-driven ?
Je pense que cela a quelque chose à voir avec le fait que Spring instancie automatiquement une instance des classes avec @Cacheable(..) ou l'une des annotations de cache de Spring. Si c'est le cas, j'aimerais savoir s'il existe un moyen de spécifier ma propriété comme argument dans sa construction.
Si je ne peux pas déclarer de constructeurs pour ces classes (et si vous connaissez la réponse, je supposerai que vous comprenez mieux que moi le flux du contexte du printemps), est-ce qu'une classe de type @Autowired o @Value(..) permet à la classe générée de détecter la propriété ?
Merci à tous d'avoir lu.