1 )开发一个CRM项目, SmartGwt + Hibernate + Spring
JDK 1.6
GWT1.7.1
SmartGwt 1.3
Hibernate 3.2
Spring 2.5
Tomcat 6.0
2) 由于SmartGwt datasource operationType 只有CRUD 4种,由于个人能力有限,未能能通过 Server DMI 自定义方法实现用户登录功能,因此使用GWT RPC 来实现(验证+返回User实例+session 操作)。
3) GWT1.7 使用 HostedMode + Jetty ,容器启动正常,实例运行正常。
4) 部署到 Linux + Tomcat 环境下,Tomcat 启动正常,但实例运行抛异常:
5) 开始以为 Tomcat 有问题,检查无误。
6) 查找资料和论坛,没有头绪。
7) 根据提示来看,应该是 GWT RPC 实现类 UserServiceRPCServlet 中的 userDao 没有注入。
代码如下:
初看没错,因为可以在 Jetty 中正常运行。随便改成如下代码:
再启动 Tomcat ,运行实例,问题解决!!
后来再将 @Autowired 换成 @Autowired + @Qualifier("userDao") , 依然正常。
不知道原因为何?
查找相关资料:
======================================================================
在java代码中可以使用@Autowire或者@Resource注解方式进行装配,这两个注解的区别是:
@Autowire默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可以结合@Qualifier注解一起使用;
@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象.
注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖的对象时候,会回退到按照类型装配,但一旦指定了name属性,就只能按照名称装配了.
==========================================================
看不出与我遇到的问题是否有关。