0

Spring 3.1 と APO(proxy) を使用しています。

提供された注釈は Pointcat として使用されます。この場合、Spring AOP プロキシ メソッド「getMergeMappingsAndCals」に CalendarMappingAnnotation のアノテーションが付けられました

私のアドバイスはAfterReturningです

側面:

@Component
@Aspect
public class MappingFilterAspect{
    /**
     *
     * @param retVal
     */
    @AfterReturning(
        pointcut="@annotation(...annotation.CalendarMappingAnnotation)",
        returning="retVal"
    )
    public void calendarMappingFilter(Object retVal) {


    }
}

注釈:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CalendarMappingAnnotation {
}

使用法:

@Component
public class ApoiMappingManagerImpl implements ApoiMappingManager, ApplicationContextAware, Serializable {
    ...
    @CalendarMappingAnnotation
    public MergedMapAndCalsBeanCollection getMergeMappingsAndCals(){
        ...
    }
}

構成:

<context:component-scan base-package="...aus.aspect" />
<aop:aspectj-autoproxy/>

スタックトレース:

java.lang.ClassCastException: $Proxy43 cannot be cast to ...mapping.cals.ApoiMappingManagerImpl
[JVM ...]   at ...helpers.SaveFillRestCalsClientHelper.init(SaveFillRestCalsClientHelper.java:62)
[JVM ...]   at ...DispatcherImpl.loadPlugin(DispatcherImpl.java:426)
[JVM ...]   at ...dispatcher.DispatcherImpl.run(DispatcherImpl.java:181)
[JVM ...]   at ...DispatcherImpl.complete(DispatcherImpl.java:319)
[JVM ...]   at ...DispatcherImpl.process(DispatcherImpl.java:259)
[JVM ...]   at ...RunnerImpl.run(RunnerImpl.java:88)
[JVM ...]   at ...JvmLauncherSlave.main(JvmLauncherSlave.java:40)
4

2 に答える 2

0

答え

このような問題は、ApoiMappingManagerImplで実装されたインターフェイスにこのメソッドを記述していないために発生しました。

public interface ApoiMappingManager {
    public MapBeanCollection assembleMaps();
    public String getRootFolder();
    public void setRootFolder(String rootFolder);
    public ErrorList getErrorList();
    public Set<String> getAgentList();
    public Set<MapBean> getMappingSetByAgentName(String agentName);
    public CalBeanCollection assembleCals(String dateStr);
    public CalBeanCollection getCalBeanCollection();
    public MergedMapAndCalsBeanCollection getMergeMappingsAndCals();  // was missed
}
于 2013-05-09T14:39:10.123 に答える