2013-05-09 75 views
0

我使用Spring 3.1和APO(代理)。

提供用作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) 

回答

2

行为看起来是正确的。

看起来您正在投射类型为ApoiMappingManagerImpl的bean的实例,并且代码正在抛出运行时异常。这是一个预期行为的原因是因为你使用的是Spring AOP,而Spring AOP本质上为你创建了一个动态代理,所以这个代理基本上实现了接口ApoiMappingManager,在内部编写了ApoiMappingManagerImpl并委托对这个组合类的调用。因此代理实现了ApoiMappingManager并且不扩展ApoiMappingManagerImpl并因此出现错误。

要解决它,你应该是如果需要转换到接口而不是实现。

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 
} 
实施
相关问题