【SSH入门】spring用注解注入action不成功?

backet007 2014-06-12 06:33:36
请教大家,spring与struts整合,我想用spring注解给struts注入action,但是打印出来却是null,是哪里错了吗?测试代码很简单:

import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.opensymphony.xwork2.ActionSupport;

@Component
@Scope("prototype")
public class MyAction extends ActionSupport{
public MyAction myAction;

public MyAction getMyAction() {
return myAction;
}

@Resource
public void setMyAction(MyAction myAction) {
this.myAction = myAction;
}

@Override
public String execute() throws Exception {
System.out.println("ok!");
return super.execute();
}
}

用junit4测试打印myAction的时候是null,<context:annotation-config /><context:component-scan base-package="com.*“/>也都配了,是哪里错了呢?
...全文
1225 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
王子愚 2016-05-24
  • 打赏
  • 举报
回复
我只是个初学者,恰好也遇到同样的问题了,来看看各位大神是如何解决的
tony4geek 2014-06-16
  • 打赏
  • 举报
回复
读取的时候路径对不?
z2007130205 2014-06-16
  • 打赏
  • 举报
回复
引用 13 楼 backet007 的回复:
[quote=引用 12 楼 z2007130205 的回复:] [quote=引用 10 楼 backet007 的回复:] [quote=引用 7 楼 z2007130205 的回复:] 有两种整合方式,第一使用spring创建action注解有效,第二使用struts2-spring-plugin插件,必须有struts2-spring-plugin-X.X.X.jar此方法注解无效,默认按name装配,需要有对应的set方法,看楼主用的哪种方式了。
我是用plugin的方式来做的,jar包也加了,难道是我方法做的不对吗?getter和setter方法在我给的代码里也写了的[/quote] 你要给Action注入Action啊,一般没那么干的啊,一般都是Action注入Service,你配的把自身注给自己,关键是创建这个Action的时候这个自身对象还不存在啊,可能是这个问题吧[/quote] private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); @org.junit.Test public void testAction() { MyAction ma = (MyAction)ac.getBean("myAction"); System.out.println(ma); } 那跟这种方式拿action不是一样的吗?[/quote] 这只是从容器中拿name是myAction的bean,没有拿到,说明创建myAction的时候就出错了,应该还会有别的报错。
懒懒程序员 2014-06-16
  • 打赏
  • 举报
回复
一般不这么干的,看你的代码还是在调用自身,这就不明白了,struts2可以直接用spring的server层,不用注解都可以掉用。再研究研究
backet007 2014-06-13
  • 打赏
  • 举报
回复
引用 7 楼 z2007130205 的回复:
有两种整合方式,第一使用spring创建action注解有效,第二使用struts2-spring-plugin插件,必须有struts2-spring-plugin-X.X.X.jar此方法注解无效,默认按name装配,需要有对应的set方法,看楼主用的哪种方式了。
我是用plugin的方式来做的,jar包也加了,难道是我方法做的不对吗?getter和setter方法在我给的代码里也写了的
backet007 2014-06-13
  • 打赏
  • 举报
回复
引用 5 楼 orzxxx01 的回复:
struts.xml 里面加上 <constant name="struts.objectFactory" value="spring" />
这个试过了也没用
backet007 2014-06-13
  • 打赏
  • 举报
回复
引用 1 楼 wang1100807 的回复:
你的配置文件呢?struts.xml
struts.xml文件很简单: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 配置为开发模式 --> <constant name="struts.devMode" value="true"/> <!-- 把扩展名配置为action --> <constant name="struts.action.extension" value="action"/> <!-- 把主题配置为simple --> <constant name="sturts.action.extension" value="simple"/> <constant name="struts.objectFactory" value="spring" /> <!-- <package name="default" namespace="/" extends="struts-default"> <action name="myAction" class="myAction"> <result>test.jsp</result> </action> </package> --> </struts>
z2007130205 2014-06-13
  • 打赏
  • 举报
回复
有两种整合方式,第一使用spring创建action注解有效,第二使用struts2-spring-plugin插件,必须有struts2-spring-plugin-X.X.X.jar此方法注解无效,默认按name装配,需要有对应的set方法,看楼主用的哪种方式了。
S117 2014-06-13
  • 打赏
  • 举报
回复
看你struts.xml 文件怎么写的吧!估计是忘了加<constant name="struts.objectFactory" value="spring" />这句吧
orzxxx01 2014-06-13
  • 打赏
  • 举报
回复
struts.xml 里面加上 <constant name="struts.objectFactory" value="spring" />
亲努力啊 2014-06-13
  • 打赏
  • 举报
回复
Controller
亲努力啊 2014-06-13
  • 打赏
  • 举报
回复
引用 2 楼 jianglang_a 的回复:
<aop:aspectj-autoproxy proxy-target-class="true" />
发错了...
亲努力啊 2014-06-13
  • 打赏
  • 举报
回复
<aop:aspectj-autoproxy proxy-target-class="true" />
backet007 2014-06-13
  • 打赏
  • 举报
回复
引用 14 楼 zq549805070 的回复:
你用getBean这个方法得到action还用Spring干嘛,要再Spring的配置文件中把action作为bean注入进去啊
我是想用注解的方式来注入,不想用xml的方式。不过问题解决了,就是不能注入自身,自己new出来就可以
zq549805070 2014-06-13
  • 打赏
  • 举报
回复
你用getBean这个方法得到action还用Spring干嘛,要再Spring的配置文件中把action作为bean注入进去啊
backet007 2014-06-13
  • 打赏
  • 举报
回复
引用 12 楼 z2007130205 的回复:
[quote=引用 10 楼 backet007 的回复:] [quote=引用 7 楼 z2007130205 的回复:] 有两种整合方式,第一使用spring创建action注解有效,第二使用struts2-spring-plugin插件,必须有struts2-spring-plugin-X.X.X.jar此方法注解无效,默认按name装配,需要有对应的set方法,看楼主用的哪种方式了。
我是用plugin的方式来做的,jar包也加了,难道是我方法做的不对吗?getter和setter方法在我给的代码里也写了的[/quote] 你要给Action注入Action啊,一般没那么干的啊,一般都是Action注入Service,你配的把自身注给自己,关键是创建这个Action的时候这个自身对象还不存在啊,可能是这个问题吧[/quote] private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); @org.junit.Test public void testAction() { MyAction ma = (MyAction)ac.getBean("myAction"); System.out.println(ma); } 那跟这种方式拿action不是一样的吗?
z2007130205 2014-06-13
  • 打赏
  • 举报
回复
引用 10 楼 backet007 的回复:
[quote=引用 7 楼 z2007130205 的回复:] 有两种整合方式,第一使用spring创建action注解有效,第二使用struts2-spring-plugin插件,必须有struts2-spring-plugin-X.X.X.jar此方法注解无效,默认按name装配,需要有对应的set方法,看楼主用的哪种方式了。
我是用plugin的方式来做的,jar包也加了,难道是我方法做的不对吗?getter和setter方法在我给的代码里也写了的[/quote] 你要给Action注入Action啊,一般没那么干的啊,一般都是Action注入Service,你配的把自身注给自己,关键是创建这个Action的时候这个自身对象还不存在啊,可能是这个问题吧
  • 打赏
  • 举报
回复
<constant name="struts.action.extension" value="action"/> <!-- 把主题配置为simple --> <constant name="sturts.action.extension" value="simple"/>
wang1100807 2014-06-12
  • 打赏
  • 举报
回复
你的配置文件呢?struts.xml

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧