Spring 依赖注入 之 设值注入 的小问题

来源:互联网 发布:盘古软件下载 编辑:程序博客网 时间:2024/05/05 16:59

跟学长学做网站,照猫画虎,好多地方都不太懂。

做网站的时候,每一个页面一个单独的请求,对应一个单独的action,在applicationcontext.xml配置文件中每个方法配置一个就行,很方便,如

<bean id="addYguser" scope="prototype" class="com.xlzx.action.YguserAction">    <property name="yguserdao">        <ref bean="YguserDAO"/>    </property> </bean>

很方便,复制粘贴就行,需要用哪个dao就写哪个。
后来有一次不好使了,问学长,原来是那个方法里使用了两个dao,这样就需要将两个dao全部写在那个配置文件里,还是不明白为什么,只知道用哪个写哪个,就像这样:

<bean id="addArticle" scope="prototype"  class="com.xlzx.action.ArticleAction">    <property name="articledao">        <ref bean="ArticleDAO"/>    </property>    <property name="typedao">        <ref bean="TypeDAO"/>    </property></bean>

但是这几天做微信时又遇到问题了,因为微信的所有请求都是从同一个入口进去的,然后在里面执行复杂的逻辑最后返回结果,所以当调用其它类中的方法时,如果被调用的方法中需要进行dao操作,我就不知道怎么弄了。

问学长,他说可能是注入那地方的问题,于是我开始查找关于注入的相关资料,最终明白了,是我对依赖注入的概念不理解导致的。

因为我也是刚懂,还不知道该怎么讲,所以依赖注入的基本知识在这里不做讲解,请自行查阅相关资料。

微信代码的基础部分我是用的我们老师按照柳峰老师的代码稍加改动后给我们的,老师给的微信示例代码只用到了struts框架,而我的这个系统是Struts 2 + Hibernate + Spring 整合的,Hibernate 负责对数据库操作,提供dao ,Spring 负责注入。我的理解是这样,如果有错误还请提出来。

我们来看一下老师给的微信代码入口部分,即main

public class CoreAction extends ActionSupport {    public String main() throws Exception {        ...        // 调用核心业务类接收消息、处理消息        String respMessage = CoreService.processRequest(request);        ...    }}       

再来看一下我修改后的整合进Spring框架里的

public class CoreAction extends ActionSupport {    public String main() throws Exception {    ...    // 调用核心业务类接收消息、处理消息    String respMessage = core.processRequest(request);    ...    }    //将核心业务类 CoreService 实例化    CoreService core = null;    public CoreService getCore() {        return core;    }    public void setCore(CoreService core) {        this.core = core;    }}

然后是对应的依赖关系设置,也就是依赖注入

<!-- 微信入口 --><bean id="main" scope="prototype"  class="com.xlzx.action.CoreAction">    <property name="core">        <ref bean="CoreService"/>    </property></bean><!-- 核心业务类 --><bean id="CoreService" scope="prototype"  class="com.xlzx.wx.service.CoreService">    <property name="xlzxaction">        <ref bean="selSelfXlzx"/>    </property> </bean>

main依赖于CoreService实例,CoreService实例在main中的名称为core,上面的配置文件大体就是这个意思。至于 xlzxaction 和 selSelfXlzx ,是我接下来要调用的一个方法的实例,这里不做讨论。

依赖关系图

0 0