struts1 action中无法用注解注入值

        这几天在用Struts1+Spring2.5+Hibernate3做课程设计,使用Spring的自动扫描和注解的方式管理bean和注入值;在Spring的配置文件中已经使用<context:component-scan base-package="com.jiangnan"/>打开了自动扫描机制,在service层接口的实现类里面也打上了@Service注解,可是在action中使用@Resource注解注入值,这个值确是null。按理来说使用<context:component-scan base-package="com.jiangnan"/>配置后就无需再配置<context:annotation-config />,因为<context:component-scan base-package="com.jiangnan"/>会打开注解;其次,在属性上打上@Service注解时可以不指定名称(也可以指定,如@Service(name="xxx")),不指定name属性,则name属性默认为类的简单名称,比如你要讲类UserServiceBean交由Spring管理,类上打的注解为@Service,效果与@Service(name="userServiceBean")一样;获取bean时使用@Resource注解,该注解默认按名称装配,搜索不到时按类型装配,到此,看不出什么原因导致注入失败。

        然后我在@Resource注解中指定了name属性,结果还是获取不到注入的值;仔细查看配置文件、该导入的包,都没问题,奇了怪了。

        接着我写了一个jUnit TestCase,在测试用例中用getBean("xxx")方法获取到了使用@Resource配置的bean;在action中使用ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext()); ctx.getBean("xxx")也获取到了那个Bean,
说明Spring容器已经正常启动,那个serviceBean已经交由Spring管理了,<context:component-scan base-package="com.jiangnan"/>已经起作用了,问题应该出在@Resource注解上。

        可是之前使用的@Resource注解看不出有什么问题啊,网上搜了一下,有提到说使用@Resource获取值时那个action需要交由Spring管理,在我的struts-config.xml里已经有了相应的配置<controller>
  <set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
 </controller>,那个action上也打上了@Controller注解,问题是获取那个注入值还是为空。

        后来发现我的action继承的是MappingDispatchAction,在struts-config.xml中配置的action的path属性的值与action类中@Controller注解中的值不一致,我把他们改成一致,结果就可以获取到注入的值了。

        那照这么说要使用Spring的依赖注入,Action就不能是MappingDispatchAction了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值