Spring AOP - 生成代理时出错

时间:2011-11-11 19:55:42

标签: spring aop spring-aop cglib

我正在使用Spring AOP的建议来捕获交易的处理时间。我在应用程序启动期间收到以下错误

error creating bean "coreMessageResourceAccesor"
   Could not generate CGLIB subclass of class 
     [class org.springframework.context.support.MessageSourceAccessor]: 
Common causes of this problem include using a final class or a non-visible class; 
nested exception is java.lang.IllegalArgumentException: 
   Superclass has no null constructors but no arguments were given

我借助thread确定了问题所在。但是我不能改变coreMessageResourceAccesor bean来使用基于setter的注入,因为它使用了一个spring类&该类没有arg构造函数

以下是bean的配置

<bean id="coreMessageSourceAccessor"
        class="org.springframework.context.support.MessageSourceAccessor" >
    <constructor-arg type="org.springframework.context.MessageSource"
        ref="coreMessageSource" />
</bean>

如果有人能提供帮助我真的很感激。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

您不需要真正需要将MessageSourceAccessor访问器配置为bean,通常可以根据需要手动实例化它。因此,不是将MessageSourceAccessor注入到bean中,而是注入原始MessageSource,然后根据需要将其包装在MessageSourceAccessor中(即使用new MessageSourceAccessor(messageSource))。

然后,您可以将建议放在MessageSource而不是MessageSourceAccessor周围,这样会更好。此外,MessageSourceAccessor本身不会增加任何重要的处理时间,它只是MessageSource周围的薄包装。