解决方案 »

  1.   

    注入 name 是属性名字段,代码只是声明了,没有实例对象,对象由spring产生注入
    protected ILogRecordService logRecoderService;
    ILogRecordService  tt = new LogRecordServiceImpl();
    logRecoderService = tt;
    tt 的名字与logRecoderService 一样吗?
      

  2.   

    name应该写的是你的代码三中的属性名,ref写的应该是你的代码二中的bean id。
    这两者根本没有什么关系,无所谓一样不一样,只不过你代码二和代码三中写的一样,如果二三中不一样,name也就和ref不一样了。
      

  3.   

    ref中的值只是一个id或name,Spring容器根据这个值去注入相应的bean
    那么引用的这个bean你需要定义好,交给Spring,它才能帮你管理(也就是你的代码二)
    代码二中的id就对应代码一中的ref,只要这两个能配对就OK~
      

  4.   

    应该是你自己理解的不对的原因,对于
    <bean id="logRecordService" class="com.min.archive.framework.log.service.LogRecordServiceImpl" parent="baseService">
            <property name="logRecordDao" ref="logRecordDao"/>
    </bean>
    property中的name要求和你的类里面的创建的对象的名称是一样的,如下name="logRecordDao",这个时候你应该在LogRecordService里面创建了private LogRecordDao logRecordDao,而ref中的值要求的是和你上面创建的bean的Id值是一样的,就像这个ref="logRecordDao",那么你应该创建了类似于<bean id="logRecordDao" class="......" >
            ........
    </bean>的bean,只要值是对应的就不会出现问题,之所以大家都写一样,应该是处于简单,不会搞混的原因吧
      

  5.   

    我的问题就在于,代码一中的name和ref不一样的话,那么在代码三中就会出现null异常。这正是我所疑虑的地方。
      

  6.   

    可能是我贴了代码没有作详细的说明,让你误解了。
    代码一是BaseAction在Spring中的配置,代码二是logRecordService在Spring中的配置。代码三是BaseAction中的部分代码。
    根据这些代码在BaseAction中不能成功注入logRecordService,而如果把代码一中的name和ref改成一样的,再在BaseAction中作相应的更改就可以成功。我不明白是为什么。
      

  7.   

    代码一中的name指向代码三中的set方法,代码一中的ref则指向代码二中的配置。可是注入不成功。
      

  8.   

    检查baseAction中是不是有logRecoderService这个属性,有没有加入set方法。
      

  9.   

    代码1的ref是代码二中的id,代码1中的name是代码3中的setXXX方法
      

  10.   

    肯定有的。Myeclipse里在配置文件中按Ctrl再点击name就可以直接跳转到那个set方法中了。
      

  11.   

    各位大神,我知道name和ref可以不同。但是我就是不明白为什么在配置正确的情况下,却不能注入成功。我只是想知道是不是还有某种情况一定要使得name和ref一样才行。
      

  12.   


    改成一样就可以,改成一样是改成logRecoderService还是logRecordService
      

  13.   

    只知道setXXX中的XXX=name,id=ref。管你name和ref一样还是不一样,name跟ref长的一样不一样有啥关系。没遇到必须一样的情况
      

  14.   


    改成一样就可以,改成一样是改成logRecoderService还是logRecordService
    改成logRecordService,然后在BaseAction中也作相应的更改就可以了。
      

  15.   

    所以你的意思就是改成logRecoderService报空指针异常吧。
    你这样操作:
    1.代码1中ref修改成logRecoderService。
    2.代码2中id修改成logRecoderService。
    试试~~
      

  16.   

    这样写就是name和ref一样的情况了,肯定是可以的。
      

  17.   

    到底什么情况,你不是说改成logRecordService就可以,改成logRecorderService报空指针,我现在让你把ref改成logRecorderService,name还是logRecordService,怎么就一样了???你再想想
      

  18.   

    property 属性中name应该只想的是你程序中的定义的需要注入接口的名称
    ref是IOC容器中bean的名称 也就是你需要注入对象的在IOC中的ID
      

  19.   

    <bean id="baseAction" class="com.min.archive.base.action.BaseAction">
            <property name="logRecoderService" ref="logRecordService" />
    </bean>这里的ref是你接口的具体实现类
    name随便你取什么
    关键有2点
    1.name取的AAA那么你用的时候 名字就要是AAA 并且要给getset方法
    2.ref里面的对象不要引用错;
      

  20.   

    简单省事儿,你可以使用spring的注解来实现自动注入 @Autowired
      

  21.   

    亲,我知道你的意思了,你是没有理解正确,就引用你说的代码片段吧,property 和ref的名字确实没有关系  ,你只需要进行这几个原则   
    1.代码一种的 property  的值 必须和 你代码三种的  private  ILogRecordService  logRecoderService; 中的“logRecoderService”  一样 ,还有一个简单的判断方法,你按着 ctrl 键,同时鼠标点击代码一里面的  property  的值,如果能跳到代码三,证明你就对了。2.  代码一 里面的 ref 的值和代码三没有关系,他值需要和代码二中的  id的值一样就行了。3综上所述,楼上同仁说的都对,是你没搞清楚原理,都写成一样的是因为不懂原理,或者怕写错了,反正都一样了就不容易错了,我感觉,你必须理解原理了才能这么做。
      

  22.   

    擦,擦,spring ioc 仔细看看
      

  23.   


        <bean id="logRecordService" class="com.min.archive.framework.log.service.LogRecordServiceImpl" parent="baseService">
            <property name="logRecordDao" ref="logRecordDao"/>
    </bean>
      <property name="logRecordDao" ref="logRecordDao"/>中的name=XX   “xx”必须是小写   在3.0中是这样  不知道现在改没改。