Predict specific object type in EhCacheFactoryBean
Prior to this change, before a bean is created by EhCacheFactoryBean, its #getObjectType would return only an Ehcache interface. This caused unwanted wiring issues as described in the related JIRA issue. This fix makes use of EhCacheFactoryBean's configuration to determine the specific Ehcache object type even before it's created, such that the container is provided with as much information as possible when resolving dependencies. Nevertheless, users are advised to code to the Ehcache interface. Issue: SPR-7843
This commit is contained in:
committed by
Chris Beams
parent
b2291ff814
commit
0690b58878
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2009 the original author or authors.
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.springframework.cache.ehcache;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import net.sf.ehcache.Cache;
|
||||
import net.sf.ehcache.CacheManager;
|
||||
import net.sf.ehcache.Ehcache;
|
||||
@@ -82,7 +83,8 @@ public class EhCacheSupportTests extends TestCase {
|
||||
EhCacheManagerFactoryBean cacheManagerFb = null;
|
||||
try {
|
||||
EhCacheFactoryBean cacheFb = new EhCacheFactoryBean();
|
||||
assertEquals(Ehcache.class, cacheFb.getObjectType());
|
||||
Class<? extends Ehcache> objectType = cacheFb.getObjectType();
|
||||
assertTrue(Ehcache.class.isAssignableFrom(objectType));
|
||||
assertTrue("Singleton property", cacheFb.isSingleton());
|
||||
if (useCacheManagerFb) {
|
||||
cacheManagerFb = new EhCacheManagerFactoryBean();
|
||||
@@ -94,6 +96,8 @@ public class EhCacheSupportTests extends TestCase {
|
||||
cacheFb.setCacheName("myCache1");
|
||||
cacheFb.afterPropertiesSet();
|
||||
cache = (Cache) cacheFb.getObject();
|
||||
Class<? extends Ehcache> objectType2 = cacheFb.getObjectType();
|
||||
assertSame(objectType, objectType2);
|
||||
CacheConfiguration config = cache.getCacheConfiguration();
|
||||
assertEquals("myCache1", cache.getName());
|
||||
if (useCacheManagerFb){
|
||||
@@ -166,6 +170,7 @@ public class EhCacheSupportTests extends TestCase {
|
||||
cacheFb.setCacheManager(cm);
|
||||
cacheFb.setCacheName("myCache1");
|
||||
cacheFb.setBlocking(true);
|
||||
assertEquals(cacheFb.getObjectType(), BlockingCache.class);
|
||||
cacheFb.afterPropertiesSet();
|
||||
Ehcache myCache1 = cm.getEhcache("myCache1");
|
||||
assertTrue(myCache1 instanceof BlockingCache);
|
||||
@@ -188,6 +193,7 @@ public class EhCacheSupportTests extends TestCase {
|
||||
return key;
|
||||
}
|
||||
});
|
||||
assertEquals(cacheFb.getObjectType(), SelfPopulatingCache.class);
|
||||
cacheFb.afterPropertiesSet();
|
||||
Ehcache myCache1 = cm.getEhcache("myCache1");
|
||||
assertTrue(myCache1 instanceof SelfPopulatingCache);
|
||||
@@ -213,6 +219,7 @@ public class EhCacheSupportTests extends TestCase {
|
||||
public void updateEntryValue(Object key, Object value) throws Exception {
|
||||
}
|
||||
});
|
||||
assertEquals(cacheFb.getObjectType(), UpdatingSelfPopulatingCache.class);
|
||||
cacheFb.afterPropertiesSet();
|
||||
Ehcache myCache1 = cm.getEhcache("myCache1");
|
||||
assertTrue(myCache1 instanceof UpdatingSelfPopulatingCache);
|
||||
|
||||
Reference in New Issue
Block a user