2013-08-03 2 views
1

Я построил почтовый сервер в java, и я был предоставлен с помощью ObserverProtocol, написанного с AOP. Я использую Eclipse, с AspectJ плагин в соответствии с требованиямиМетод aspectOf не определен

Я пытаюсь использовать статические методы, как aspectOf, которые я, как понять, должны быть добавлены на этапе ткачества

Eclipse, не могу заставить его работать, как я всегда получаю следующее сообщение об ошибке:

Описание Путь информационного ресурса Тип метод aspectOf() не определено для типа ObserverProtocol MailReaderBean.java/emailClent_test/SRC/emailserver линии 86 Java Проблема

Из того, что я понял по шныряли различных веб-сайты, учебники и документы Кажется, что мои файлы .aj не правильно сплетены.

Я попытался скомпилировать вручную с помощью ajc безрезультатно, и я по-разному перебирал пути и настройки, банки и библиотеки по-разному, ничего не работает, и я не могу найти полное руководство или учебник для установки вещи правильно

Мой аспект код:

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?

+0

Вы можете видеть, что вы аспект ткут? Попробуйте декомпилировать код и найти методы 'aspectOf()' и 'hasAspect()'. –

+0

Пожалуйста, подумайте над устранением чрезмерных комментариев при отправке кода; в общем, это просто шум, из-за которого сложнее думать о коде. –

+0

Я попытаюсь декомпилировать класс сегодня вечером, когда я вернусь домой (также удалены комментарии) – user1229829

ответ

2

Этот метод (и hasAspect()) добавляется во время ткачества. Если ваш аспект был построен с javac, а не ajc, тогда он не будет иметь эти методы, когда jvm начнется, потому что ткач еще не запущен.

Я рекомендую вам прочитать эти документы -

+0

Я попытался вручную скомпилировать с помощью ajc в командной строке, но это довольно большой проект с довольно большим количеством пакетов, и я не смог сделать это это правильно. Я попробую еще раз как можно скорее – user1229829

+0

Оказывается, моя сборка была в порядке. Это не имело никакого отношения к ткачеству вообще, я был не прав где-то еще в моем коде. Спасибо хоть – user1229829

Смежные вопросы