Superclass没有null构造函数,但没有给出参数。 Spring集成

时间:2012-06-26 16:12:17

标签: spring messaging spring-integration cglib

我正在开发Spring Integration支持的Web应用程序。我正在使用1.0.4.RELEASE。我使用CGLib代理。我有一个事务性消息端点。一切都正常,但我尝试了一些注释。我使用annotation-config,它工作正常。我从将服务激活器配置从xml切换到注释开始,但它失败了。

以下配置正常运行:

弹簧integration.xml

<channel id="inChannel" />
<channel id="outChannel" />
<service-activator method="myMethod" input-channel="inChannel" ref="myService" output-channel="outChannel" />

MyService.java

@MessageEndpoint
@Transactional
public class MyService {

   @Autowired
   private MyDao myDao;

   public MyObject myMethod(String message) throws Exception {
      ...
   }

}

尝试使用注释实现完全相同的功能(考虑到我使用CGLIB,所以我不需要接口,但默认构造函数)我

  • 从我的.xml中删除了service-activator
  • 更改了MyService:

更改了MyService.java

@MessageEndpoint
@Transactional
public class MyService {

   @Autowired
   private MyDao myDao;

   public MyService () {
   }

   @ServiceActivator(inputChannel="inChannel", outputChannel="outChannel")
   public MyObject myMethod(String message) throws Exception {
      ...
   }

}

我收到以下错误: java.lang.IllegalArgumentException:Superclass没有null构造函数但没有给出参数

我见过很多线程描述了以下错误article,但问题出在自定义类上。我的问题是关于Spring类。

Error creating bean with name 'myService'
nested exception is org.springframework.aop.framework.AopConfigException
Could not generate CGLIB subclass of class [class org.springframework.integration.handler.ServiceActivatingHandler]
java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given

怎么了?为什么Spring尝试为spring类创建代理,而不仅仅是为MyService创建代理?我的课程被包裹了吗?我不明白发生了什么。非常感谢。

2 个答案:

答案 0 :(得分:2)

尝试取消@Autowired标记。这样可以查找构造函数或setter方法以填充该字段。考虑到你没有这些,这可能是问题所在。只是一个猜测。

答案 1 :(得分:1)

或者你可以使myDao包受保护或公开(以便Spring可以实际自动装配它)

例如:

@Autowired
myDao