关于spring bean 注入的一个问题

XX的小石头 2013-09-09 07:53:45
有5个方法,分别是查询全部、按id查询、增加、删除、修改,其中在使用按id查询这个方法的时候,检查输出被注入的对象结果是null,但是使用其他四个方法的时候全部都可以成功,检查输出被注入的对象结果是一个对象,明显是注入成功了,但是用那个方法的时候为什么就变成null了?求大神给解答一下

配置文件:
<bean id="goodsdao" class="com.csms.dao.GoodsDAO">
<property name="sf" ref="sf" />
</bean>

service:

public class GoodsService{
private GoodsDAO goodsdao;

public GoodsDAO getGoodsdao() {
return goodsdao;
}

public void setGoodsdao(GoodsDAO goodsdao) {
this.goodsdao = goodsdao;
}

public GoodsSC queGoodsById(int id){
return goodsdao.queryByid(id);
}


...全文
276 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
XX的小石头 2013-09-11
  • 打赏
  • 举报
回复
引用 13 楼 soton_dolphin 的回复:
<bean id="sf" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> 这是贴错了,还是xml里面就少了</bean>?
问题已经找到了,原来在action的方法里面重新new了个gs对象导致的,感谢你的回答
XX的小石头 2013-09-11
  • 打赏
  • 举报
回复
引用 14 楼 feg545 的回复:
把调用GoodsService的地方贴出来。 理论上<bean id="gs" class="com.csms.service.GoodsService"> 这个节点应该加一个属性prototype="singleton"
应该是scope="singleton"吧,呵呵 而且默认情况下不就是singleton吗? 不过经你提醒service部分又去检查了一下,发现错误原来是在action的方法里面重新new了个gs对象
XX的小石头 2013-09-11
  • 打赏
  • 举报
回复
引用 13 楼 soton_dolphin 的回复:
<bean id="sf" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> 这是贴错了,还是xml里面就少了</bean>?
额,贴错了 <bean id="sf" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!--在此路径下扫描实体类配置文件 --> <property name="mappingResources"> <list> <value>com/csms/po/EntryDetailPO.hbm.xml</value> <value>com/csms/po/GoodsPO.hbm.xml</value> <value>com/csms/po/GoodsSC.hbm.xml</value> <value>com/csms/po/OutDetailPO.hbm.xml</value> <value>com/csms/po/StockPO.hbm.xml</value> <value>com/csms/po/StorageEntryPO.hbm.xml</value> <value>com/csms/po/StorageOutPO.hbm.xml</value> <value>com/csms/po/StoragePO.hbm.xml</value> <value>com/csms/po/UserPO.hbm.xml</value> </list> </property> <!--配置hibernate --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> </props> </property> </bean>
soton_dolphin 2013-09-10
  • 打赏
  • 举报
回复

public class GoodsService{
    private GoodsDAO goodsdao;
 
    public GoodsSC queGoodsById(int id){
          return goodsdao.queryByid(id);
     }

         
      public void setGoodsdao(GoodsDAO goodsdao) {
               this.goodsdao = goodsdao;
       }
 
}

soton_dolphin 2013-09-10
  • 打赏
  • 举报
回复
这里不需要GETGOODSDAO这个方法
soton_dolphin 2013-09-10
  • 打赏
  • 举报
回复
还有你service的bean
soton_dolphin 2013-09-10
  • 打赏
  • 举报
回复
把那个sf的bean 也贴出来看看
XX的小石头 2013-09-10
  • 打赏
  • 举报
回复
引用 7 楼 u010580980 的回复:
你注入和action中set的要一致,不知道是不是这个原因
我检查过是一致的,而且我换一个别的属性名也还是一样不行
XX的小石头 2013-09-10
  • 打赏
  • 举报
回复
引用 6 楼 soton_dolphin 的回复:

public class GoodsService{
    private GoodsDAO goodsdao;
 
    public GoodsSC queGoodsById(int id){
          return goodsdao.queryByid(id);
     }

         
      public void setGoodsdao(GoodsDAO goodsdao) {
               this.goodsdao = goodsdao;
       }
 
}

应该不是这个问题,去掉之后还是不行
福来哥 2013-09-10
  • 打赏
  • 举报
回复
把调用GoodsService的地方贴出来。 理论上<bean id="gs" class="com.csms.service.GoodsService"> 这个节点应该加一个属性prototype="singleton"
soton_dolphin 2013-09-10
  • 打赏
  • 举报
回复
<bean id="sf" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> 这是贴错了,还是xml里面就少了</bean>?
XX的小石头 2013-09-10
  • 打赏
  • 举报
回复
引用 11 楼 soton_dolphin 的回复:
还有你service的bean
sf的bean: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/csms"></property> <property name="username" value="root"></property> <property name="password" value="731950"></property> </bean> <bean id="sf" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> service的bean: <bean id="gs" class="com.csms.service.GoodsService"> <property name="goodsdao" ref="goodsdao" /> </bean>
u010580980 2013-09-10
  • 打赏
  • 举报
回复
你注入和action中set的要一致,不知道是不是这个原因
XX的小石头 2013-09-09
  • 打赏
  • 举报
回复
引用 3 楼 BuDongOrz 的回复:
那就不大清楚了。楼主或许再检查一下配置文件,看有没有漏注入之类的(不过没注入的话,应该会抛NullPointerException...)。
那个bean的配置文件我已经贴出来了,而且也确实是报了空指针异常之后检查才发现没有注入
_肉君 2013-09-09
  • 打赏
  • 举报
回复
那就不大清楚了。楼主或许再检查一下配置文件,看有没有漏注入之类的(不过没注入的话,应该会抛NullPointerException...)。
XX的小石头 2013-09-09
  • 打赏
  • 举报
回复
引用 1 楼 BuDongOrz 的回复:
会不会是数据库不存在记录?
不会,我是先从数据库查询出全部数据,然后以超链接的形式调用按id查询这个方法,所以不可能有数据库不存在的问题
_肉君 2013-09-09
  • 打赏
  • 举报
回复
会不会是数据库不存在记录?

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧