当前位置:编程学习 > JAVA >>

回答就有分!springmvc的例子在调用action时spring注入成功,但是在访问时注入的东西是null

我在做一个基本的spring mvc的例子
action是用注解的mvc。
接口

public interface ITest {

public void say();

}

接口的实现类

public class TestImpl implements ITest{

public void say() {
System.out.println("I am TestImpl");
}
}

Action类的代码是

@Controller
@RequestMapping("person")
public class UrAction extends JdbcTem{

private ITest test;

@RequestMapping("/say")
public String say(){
test.say();
return null;
}

public ITest getTest() {
return test;
}

public void setTest(ITest test) {
System.out.println("--注解--"+test);
this.test = test;
}
}

配置文件的地方是

<bean id="test" class="com.ur.action.TestImpl"></bean>

<bean id="urAction" class="com.ur.action.UrAction">
<property name="test" ref="test"></property>
</bean>

服务器启动的时候,控制台打印出了如下信息,表示注解进去了
--注解--com.ur.action.TestImpl@c6f734

但是我网址访问
http://127.0.0.1:8080/SprintTest/person/say.do
确是null异常。如果加上@Autowired,可以注解进去,但是我不想用注解的方式注入
请问各位高手,我该怎么办。 java spring --------------------编程问答-------------------- 不想用注解的方式,那就是想用配置的方式了?

bean元素下<constructor-arg>或<property>元素 --------------------编程问答-------------------- 我都已经配了呀
<bean id="test" class="com.ur.action.TestImpl"></bean>           <bean id="urAction" class="com.ur.action.UrAction">         <property name="test" ref="test"></property>     </bean>
--------------------编程问答-------------------- null异常是你这里返回null的缘故吧,test即使实际是注入的。

public String say(){
        test.say();
        return null;
}
 
试着换成return一个普通字符串呢

因为我按相同配置测试,也是能注入的

ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");

UrAction urAction = (UrAction) factory.getBean("urAction");
urAction.say();
--------------------编程问答-------------------- 不用注解楼主用什么spring mvc啊,用ssh算了,spring mvc的优点你一点都没用上.感觉不伦不类的!!!#3楼正解 --------------------编程问答--------------------
引用 3 楼 dracularking 的回复:
null异常是你这里返回null的缘故吧,test即使实际是注入的。

public String say(){
        test.say();
        return null;
}
 
试着换成return一个普通字符串呢

因为我按相同配置测试,也是能注入的
Java code?1234ApplicationContext fact……

楼主试试 --------------------编程问答-------------------- 依赖注入不需要设置get()方法 --------------------编程问答-------------------- 试试3楼, 看看6楼。   spring MVC 不用注解的方式的确有点那个啥... --------------------编程问答--------------------
引用 6 楼 xuyonghui123 的回复:
依赖注入不需要设置get()方法
把它删了吧,试试 --------------------编程问答-------------------- springMVC简单例子我也做过,不过没有用过注解,都是用配置文件的。 --------------------编程问答-------------------- 难道是你的bean名字叫的有问题吗? 把test改成其它名字试试.

或加个属性
<property name="test" ref="test" autowire="byName"></property> --------------------编程问答-------------------- 声明接口 bean  属性abstrct为true
实现类 的bean  添加属性 parent  值为接口bean的ID
--------------------编程问答--------------------
引用 4 楼 whz137458 的回复:
不用注解楼主用什么spring mvc啊,用ssh算了,spring mvc的优点你一点都没用上.感觉不伦不类的!!!#3楼正解
+1 --------------------编程问答-------------------- 按照3楼的说法,很明显启动的时候没有加载到spring的配置文件

在web.xml加上


<context-param>
<param-name>contextConfigLocation</param-name>
<!-改成你的spring配置文件-->
<param-value>/WEB-INF/application.xml</param-value>
</context-param>
--------------------编程问答-------------------- 我也遇到这样的问题了的!可能业务不同但是问题是很类似的!我本来在练习集成SSH的项目,在写的时候,struts还没有整合进去,先实现的是hibernate整合spring+servlet,在web启动的时候,dao与service中的bean都注入了,在发出请求时,action中的bean就是注入不了,始终未空,整了很久最后我把struts整合进去,结果问题解决了;最后分析可能是struts中的struts2-spring-plugin.jar起了最用,把action都交给了spring来管理;而使用servlet,action则没有交给spring来管理;如果用spring的mvc而不用注解的话,我猜spring不会管理action,所以每次发出请求时都为null;希望对你有帮助,我也是新手! --------------------编程问答-------------------- 是的,虽然配置了,但是没加载到sprng容器中 --------------------编程问答-------------------- 这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。<bean id="userDao" class="..."/><bean id="userService" class="...">    <property name="userDao">      <ref bean="userDao"/>    </property></bean>这样你在userService里面要做一个userDao的setter/getter方法。但如果你用了@Autowired的话,你只需要在UserService的实现类中声明即可。@Autowiredprivate IUserDao userdao;   --------------------编程问答-------------------- 3楼正解,楼主可以自己去试一下。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,