在spring中实例化bean无效的问题

网友投稿 400 2022-08-25


在spring中实例化bean无效的问题

目录spring中实例化bean无效Action中代码如下applicationContext.xml中配置如下spring实例化bean顺序问题,导致注入失败问题如下原因解决

spring中实例化bean无效

在做Struts2和Spring整合时遇到Spring实例化无效的情况,

Action中代码如下

public class UserAction extends ActionSupport {

@Resource

private UserService userService;

public String execute(){

//userService.saveUser(new Object());

System.out.println(userService);

System.out.println("struts2spring整合成功");

return "success";

}

}

applicationContext.xml中配置如下

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans-2.5.xsd

http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-2.5.xsd

http://springframework.org/schema/tx http://springframework.org/schema/tx/spring-tx-2.5.xsd">

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans-2.5.xsd

http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-2.5.xsd

http://springframework.org/schema/tx http://springframework.org/schema/tx/spring-tx-2.5.xsd">

通过注解实例化UserService时一直得到的是null。最后经过查找,发现没有导入Struts2-Spring-plugin.jar的原因。

spring实例化bean顺序问题,导致注入失败

我们可以通过Spring进行非常方便的管理bean,只需要在类上面加一个注解就可以进行bean的注入,也就是所谓的http://DI。今天碰到了个小问题,来总结一下。

问题如下

public abstract class TestBean {

public String str;

public TestBean(){

this.str = initStr();

}

protected abstract String initStr();

}

public class TestSon extends TestBean {

@Resource

public String str;

@Override

protected String initStr() {

return this.str;

}

}

但是发现这个str始终是null。

原因

在实例化TestBean的时候不能确认str已经实例化,所以是先建立对象,再进行注入str的值。那么创建对象的时候,根据构造方法创建的对象中,还没有注入str的值,所以只能为null。

解决

我们需要确认在str已经注入进来的情况下再对父类中的str赋值,那么这个时候需要子类实现 InitializingBean 这个接口,实现其中的afterPropertiesSet()

phttp://ublic class TestSon extends TestBean implements InitializingBean

{

@Resource

public String str;

@Override

protected String initStr() {

return this.str;

}

@Override

public void afterPropertiesSet() throws Exception {

super.str = this.str;

}

}

问题成功解决。注入成功


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python面向对象编程——单例(python3面向对象编程实例)
下一篇:python面向对象编程——继承(python面向对象的继承和多态)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~