2

我用 java 构建了一个邮件服务器,并提供了一个用 AOP 编写的 ObserverProtocol。我根据需要使用带有 AspectJ 插件的 Eclipse

我尝试使用aspectOf之类的静态方法,据我所知,应该在编织步骤中添加它们

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

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

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

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

我的方面代码:

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 的情况下设置我的构建?

4

1 回答 1

2

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

我建议你阅读这些文件:

于 2013-08-03T22:59:36.400 回答