我有一个带弹簧配置的应用服务器 - 客户端RMI。现在我不会使用@Aspect添加方法调用记录。
我在spring-context.xml中添加了:
<aop:aspectj-autoproxy>
</aop:aspectj-autoproxy>
<bean id="loggerAspect" class="my.aspect.LoggerAspect" />
我的loggerAspect
已定义
@Pointcut("execution(* my.rmi.service.*.*(..))")
当我尝试运行我的应用程序时,我得到:
Caused by: java.io.NotSerializableException: org.springframework.aop.aspectj.annotation.InstantiationModelAwarePointcutAdvisorImpl
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
... 8 more
我的RMI接口扩展了Serializable,此接口中使用的所有类也实现了Serializable。
答案 0 :(得分:1)
序列化Spring AOP代理很棘手,因为有很多失败点。
但是,您仍然可以使用可序列化的顾问程序链序列化JDK代理。
例如,使用AspectJExpressionPointcutAdvisor
<bean id="advisor" class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor">
<property name="expression" value="execution (* test.*.*(..))" />
<property name="advice">
<bean class="org.springframework.aop.interceptor.SimpleTraceInterceptor" />
</property>
</bean>
如果所有目标对象都实现了接口,则将起作用。