<bean id="loginServiceImpl" class="serviceimpl.LoginServiceImpl"></bean>
<bean id="loginAction" class="action.LoginAction">
<property name="loginServiceImpl" ref="loginServiceImpl"></property>
</bean>这里在给action注入的时候,为什么property name="loginServiceImpl"和 ref="loginServiceImpl"这两者要相同!还是struts的Action不需要Spring来注入的,直接通过Struts.xml里面的拦截器来实现?
因为你这里把property name="loginServiceImpl"和ref="loginServiceImpl"改成不一样的话,就会报空指针错误。
  这里面的机理到底怎么样,求大神解答谢谢!SpringSSHStruts框架

解决方案 »

  1.   

    loginServiceImpl是上面定义的一个bean的id。id,就是唯一区别不同bean的,Spring启动后,会创建一个个定义的类实体对象,用id作为索引保存在ApplicationContex中(容器),其它bean如果想用这样的对象,就把这个索引传过去即可。如果id写一个不存在的类型,那容器中当然找不到这个bean实体,自然而然就“空指针”啦!
      

  2.   

    这里的property是指action里面的成员变量,你在action里面需要创建的类serviceimpl.LoginServiceImpl的名字是loginServiceImpl,而后面的ref指的是前面创建的这个类bean的id。原理的话推荐一本书<<SPRING技术内幕——深入解析SPRING架构与设计原理>>,求大家指正
      

  3.   

    property name="loginServiceImpl"和ref="loginServiceImpl不需要相同,只要你对应名字就可以了...前者是你注入的类里面的那个set方法的名字,后者是你声明bean的名字...简单的说就是把通过xml配置把声明的指向注入通过你的set方法,当然还有的情况是比较特别的,就是你使用注解的时候,如果默认不使用别名的话,就是默认规则,类名的首字母变小写,例如UserDao...他的默认bean名就是userDao..你注入的时候就setUserDao,在这个方法上加入@Resource这样能匹配,或者是@Resource(name = "userDao")这样是强制指定对应bean名
      

  4.   

    <property name="loginServiceImpl" ref="loginServiceImpl"></property> 这里的两个loginServiceImpl是可以不一样的,如果你前一个loginServiceImpl不是叫这个,那么你在action中定义时也不能叫这个,action中的ref="xxx"必须保证xxx与这里的<property nam="xxx" ..../>保持一致,同理,如果你后一个loginServiceImpl不是叫这个,那么你在dao声明时也不能叫这个,LZ慢慢尝试吧,你会懂的
      

  5.   

    // id是唯一标识你这个bean的,自己想怎么改都行,只要符合语法规定就行
    <bean id="loginServiceImpl" class="serviceimpl.LoginServiceImpl"></bean>
     <bean id="loginAction" class="action.LoginAction">
    // name是所属的action.LoginAction中定义的属性名,肯定不能乱写了,要与属性名相同,ref引用的就是你需要注入的bean的id,需要和你上边定义的相同就行了。
     <property name="loginServiceImpl" ref="loginServiceImpl"></property>
     </bean>
      

  6.   

    <property name="loginServiceImpl" ref="loginServiceImpl"></property>
    -----------------------------
    name和ref不需要相同,一个是property对应的bean需要声明一个loginServiceImpl成员;另一个是spring环境中必须定义一个名称为loginServiceImpl的bean。
      

  7.   

    很容易理解,只要知道,name是你类里的属性名, 而ref对应的是你注入的ID呀
      

  8.   

    我试过貌似下面的action是一定要相同的
      

  9.   

    <bean id="loginAction" class="action.LoginAction">
    <property name="loginServiceImpl" ref="loginServiceImpl"></property>
    </bean>
    ===================================================
    property :指bean id为"loginAction"的类 有loginServiceImpl这个属性。只是说明有这个属性。但这个属性是什么类型的还不知道。
    ------------------------------------
    ref="loginServiceImpl"就是解决这个问题的。ref指向了另外一个bean,那个bean是loginAction的属性。那个bean的id也为loginServiceImpl,所以这里的rel要写成loginServiceImpl。
    那个bean的类型为class="xxxx"定义的类型。
    ------------------------------------
     name="loginServiceImpl" ref="loginServiceImpl" 这两个不一定一样,配成一样是省事。只要ref的值和loginServiceImpl这个类的配置的id的值 一样就行了。
      

  10.   

     name="loginServiceImpl"是loginAction的成员变量
     ref="loginServiceImpl是给这个变量赋值
      

  11.   

    不一定要相同的,<property name="login" ref="loginServiceImpl"></property>中的name和你在代码中的name一致就可以了。比如:private LoginServiceImpl login这样也是可以的
      

  12.   

    这个不一定需要相同的,只是你的这个注入的ID是跟你本ID一样,是这么一个情况的;