2013-06-04 4 views
1

Во-первых, я пытаюсь конфигурации XML:Объявляет родители AspectJ

<aop:aspect> 
     <aop:declare-parents types-matching="DBOperations.ILearningData+" 
          implement-interface="DBOperations.ISaveResults" 
          delegate-ref="saverExtension"/> 
</aop:aspect> 

и он работает хорошо.

Теперь я пытаюсь сделать AspectJ, которым должны делать то же самое:

public aspect ASaveResults { 

public ASaveResults() { } 

declare parents : TSaveResults implements ILearningData; 
} 

где TSaveResults является такой же, как боб «saverExtension».

я запускаю мой код:

... 
@Value("#{learningData}") 
protected ILearningData saver; 
    ... 
    ((ISaveResults)saver).saveResults(); 

и получаю ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.proxy.$Proxy12 cannot be cast to DBOperations.ISaveResults 

что проблема с моим AspectJ?

Также я попробовал этот код неудачная:

public aspect ASaveResults { 

public ASaveResults() { } 

declare parents : ISaveResults implements ILearningData; 

public void saveResults() { 
    System.out.println("saver aspect"); 
} 

}

+0

Вы включили автоопределение AOP весной xml? Похоже, что переплетения не происходит ... –

+0

Я: и

+0

Также аксессуар был хорошо связан с и раньше. Поэтому я думаю, что моя проблема заключается в определении аспекта ASaveResults –

ответ

2

Что вы использовали там ядро ​​AspectJ, так что если вы хотите использовать Spring AOP, но не XML конфигурации, то это то, что вы должны делать (не проверено):

@Aspect 
public class ASaveResults { 

    @DeclareParents(value="ISaveResults") 
    public static ILearningData interf; 

    public void saveResults() { 
     System.out.println("saver aspect"); 
    } 
} 
+0

Твой путь, я думаю, тоже хорош. Но я нахожу решение, которое хочу: –

+0

спасибо большое :) –

+0

ваш приветствуем :) –

1
public aspect ASaveResults {  

public ASaveResults() { } 

declare parents : LearningData extends TSaveResults; 

} 

где это LearningData и TSaveResults - классы. Итак, теперь TSaveResults расширяет LearningData - это была моя цель