我正在开发 Spring Integration 支持的 Web 应用程序。我正在使用 1.0.4.RELEASE。我使用 CGLib 代理。我有一个事务性消息端点。一切正常,但我尝试了一些注释。我使用注释配置,效果很好。我开始将我的服务激活器配置从 xml 切换到注释,但它失败了。
以下配置正常工作:
弹簧集成.xml
<channel id="inChannel" />
<channel id="outChannel" />
<service-activator method="myMethod" input-channel="inChannel" ref="myService" output-channel="outChannel" />
我的服务.java
@MessageEndpoint
@Transactional
public class MyService {
@Autowired
private MyDao myDao;
public MyObject myMethod(String message) throws Exception {
...
}
}
尝试使用注释实现完全相同的功能(记住我使用 CGLIB,所以我不需要接口,但需要默认构造函数)我
- 从我的 .xml 中删除服务激活器
- 更改了我的服务:
更改了 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 has no null constructors but no arguments were given
我看到很多线程描述了以下错误文章,但问题是关于自定义类。我的问题与 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 创建代理?我的课以某种方式包装了吗?我不明白发生了什么。非常感谢帮助。