首页 文章

带有spring cache和aspectj的NoClassDefFoundError

提问于
浏览
5

我在 Spring 季webapp( Spring 季3.1)中收到此错误,我不知道为什么 .

org.springframework.web.util.NestedServletException:处理程序处理失败;嵌套异常是java.lang.NoClassDefFoundError:mypackage / TestCache $ AjcClosure1

$AjcClosure1 很奇怪)

如果我在下面的类中注释注释 @Cacheable ,则错误消失了 .

public class TestCache {

        @Cacheable(value ="myCache")
        public List<String> getDummyList(){
            Logger l = Logger.getLogger(this.getClass());
            l.error("calling getDummyList");
            ArrayList<String> foo = new ArrayList<String>();
            foo.add("foo");
            foo.add("bar");
            return foo;
        }

    }

我的控制器类(简化):

@Controller
@RequestMapping("/mypage")
public class MyController {


    @RequestMapping
    public String index(ModelMap model, Locale locale) {
        TestCache tc = new TestCache();
        ...
    }
}

应用程序上下文(仅缓存部分):

<cache:annotation-driven mode="aspectj"/>
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcache"/>
    <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:config-location="classpath:ehcache.xml"/>

我尝试了代理和aspectj模式(在代理模式下减少错误但缓存无效)

这个Web应用程序最初是使用roo构建的,并使用spring mvc和webflow . 所以applicationContext.xml或webmvc-config.xml中有相当多的xml(我无法理解一些bean在做什么) . 我使用m2e-wtp在eclipse中运行wepapps,而pom.xml正在使用插件aspectj-maven-plugin(但不知道它的作用)

看起来问题与aspectj有关,但我从未使用aspectJ . 如果有人spring / java / aspectj guru可以解释我是什么造成了这个错误以及我如何使我的缓存工作它会很棒! (我只能找到教程但没有使用可缓存注释的示例项目) .

2 回答

  • 0

    似乎问题来自于所有类$ AjcClosure [n] .class都没有发布的事实,唯一的方法是删除,webapps,干净启动并重新发布webapp .

  • 3

    一个问题(可能不是导致NoClassDefFoundError的问题)是你可以使用Spring函数,如 @Cacheable 仅适用于Spring Beans . 因此,如果你通过 new 创建一个类(并且这个类没有_2688749注释)那么这是一个普通的类,而不是一个Spring bean . 因此,在代理模式下将忽略注释 . - 这可能会导致AspectJ模式中的这个stange错误,但我不知道 .

相关问题