如何解决以下AspectJ方面的ClassNotFoundException?

时间:2014-05-21 14:34:38

标签: java spring aspectj

Spring In Action一书有以下例子。它使用AspectJ的方面来说明构造函数切入点。

示例:

package com.ct.springidol;
public aspect JudgeAspect {
    public JudgeAspect() {

    }

    private CriticismEngine criticismEngine;

    //Constructor injection is supposed to happen
    public void setCriticismEngine(CriticismEngine criticismEngine) {
        this.criticismEngine = criticismEngine;
    }

    pointcut performance(): execution( * perform(..));

    after() returning(): performance() {
        System.out.println(criticismEngine.getCriticism());
    }
}

package com.ct.springidol;
public class CriticismEngineImpl implements CriticismEngine {
    //CriticismEngine - an interface -  has only getCriticism() method.

    public CriticismEngineImpl() {

    }

    private String[] criticismsPool;
    //injected using xml file
    public void setCriticismsPool(String[] criticismsPool) {
        this.criticismsPool = criticismsPool;
    }

    public String getCriticism() {
        int i = (int) (Math.random() * criticismsPool.length);
        return criticismsPool[i];
    }
}

相应的XML:

<bean id="criticismEngine"
      class="com.ct.springidol.CriticismEngineImpl">
    <property name="criticismsPool">
        <list>
            <value>I'm not being rude, but that was appalling.</value>
            <value>You may be the least talented person in this show.</value>
            <value>Do everyone a favor and keep your day job.</value>
        </list>
    </property>
</bean>


<bean class="com.ct.springidol.JudgeAspect" factory-method="aspectOf">
    <property name="criticismEngine" ref="criticismEngine"/>
</bean>

但是当我运行程序,即运行perform()方法时,我得到以下异常。怎么解决这个?仅供参考,我的maven依赖项中包含aspectjrtaspectjweaver

例外:

Exception in thread "main"
    org.springframework.beans.factory.CannotLoadBeanClassException:
    Cannot find class [com.ct.springidol.JudgeAspect] for bean with name
    'com.ct.springidol.JudgeAspect#0' defined in class path resource
    [spring-idol.xml]; nested exception is
        java.lang.ClassNotFoundException: com.ct.springidol.JudgeAspect

2 个答案:

答案 0 :(得分:0)

JudgeAspect的代码段中的包声明似乎缺失了。你需要它来切入你的切入点。你忘记把它贴在这里吗?看起来好像Spring找不到自己的bean。这看起来像是类路径配置问题,而不是AspectJ或Spring AOP问题。我不是Spring用户,但这就是我的样子。

这是你的第一个Spring计划吗?你有没有设法让一个最小的Spring项目运行?

答案 1 :(得分:0)

我正在使用IntelliJ。我必须配置IDE才能编译方面,即JudgeAspect。为了使该程序正常工作,它需要编译方面。因此,必须在IDE的编译器设置中启用AspectJ compilerajc compiler而不是Java编译器。 有关完整的详细信息

http://www.jetbrains.com/idea/webhelp/using-the-aspectj-%28ajc%29-compiler.html