方法aspectOf未定义

时间:2013-08-03 21:39:19

标签: java aop aspectj

我在java中构建了一个邮件服务器,并且我已经提供了一个用AOP编写的ObserverProtocol。我正在使用带有AspectJ插件的Eclipse

我尝试使用像aspectOf这样的静态方法,我应该在编织步骤中添加我应该理解的方法

Eclipse似乎无法使其正常工作,因为我总是收到以下错误:

描述资源路径位置类型 方法aspectOf()未定义类型ObserverProtocol MailReaderBean.java / emailClent_test / src / emailserver第86行Java问题

根据我的理解,窥探各种网站,教程和文档,似乎我的.aj文件没有正确编织

我尝试用ajc手动编译无济于事,我用各种方式修改了路径和设置以及jar和libs,似乎没有任何工作,我似乎无法找到明确的指南或教程来正确设置< / p>

我的方面代码:

package protocol;


import java.util.WeakHashMap;
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;


public abstract aspect ObserverProtocol 
{

    protected interface Subject { }


    protected interface Observer { }

    private WeakHashMap perSubjectObservers;        

    protected List getObservers(Subject s) 
    {
        if (perSubjectObservers == null) 
        {
            perSubjectObservers = new WeakHashMap();
        }

        List observers = (List)perSubjectObservers.get(s);

        if ( observers == null ) 
        {
            observers = new LinkedList();
            perSubjectObservers.put(s, observers);
        }

        return observers;
    }       

    public void addObserver(Subject s, Observer o) 
    {
        getObservers(s).add(o);
    }       

    public void removeObserver(Subject s, Observer o) 
    {
        getObservers(s).remove(o);
    }

    protected abstract pointcut subjectChange(Subject s);

    after(Subject s): subjectChange(s) 
    {
        Iterator iter = getObservers(s).iterator();

        while ( iter.hasNext() ) 
        {
            updateObserver(s, ((Observer)iter.next()));
        }
    }       

    protected abstract void updateObserver(Subject s, Observer o);

    public static ObserverProtocol aspectOf() {
        // TODO Auto-generated method stub
        return this;
    }
}

我的java服务器中的违规代码

//Add observer Proxy for monitoring the subject MailServer.
ObserverProtocol.aspectOf().addObserver(this, proxy );

是否有任何资源可以帮助我了解编织的工作原理以及如何在不使用Spring或Maven的情况下设置构建?

1 个答案:

答案 0 :(得分:2)

在编织过程中添加此方法(和hasAspect())。如果你的方面是使用javac而不是ajc构建的,那么当jvm启动时它将没有这些方法,因为织工还没有运行。

我建议你阅读这些文件: