spring IOC的问题

M_y_s_k_y 2015-07-29 01:41:29
刚学spring ,看着说springIOC等于不需要自己new对象,由spring来管理,所以自己做了一个小实验,结果总是失败,在此请教朋友们解答疑虑! 项目采用springmvc+ibatis
----------spring里面的部分配置------------
<bean id="sqlMap"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation"
value="WEB-INF/SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource"></property>
</bean>

<bean id="dao" class="com.bh.common.dao.CommonDao">
<property name="sqlMapClient" ref="sqlMap" />
</bean>

<bean class="com.bh.common.dao.CommonDaoUtils">
<property name="dao" ref="dao" />
</bean>
-----------------------------------------------------------

package com.bh.common.dao;
public class CommonDaoUtils {

private static CommonDao dao ;

public static CommonDao getDao() {
return dao ;
}

public void setDao(CommonDao dao) {
CommonDaoUtils.dao = dao;
}
}
-------------------------------------------------------------
按照我的理解是这样的,通过spring的配置将CommonDao类注入给CommonDaoUtils,上面的这样配置程序没有问题。
问题是我将 <bean class="com.bh.common.dao.CommonDaoUtils">
<property name="dao" ref="dao" />
</bean>这段代码注释掉,不用spring的配置,而是自己在CommonDaoUtils类里面使用new,private static CommonDao dao = new CommonDao();改成这样后程序出现java.lang.NullPointerException异常,不知道是什么原因,spring里面的bean不就是不用自己new对象,由spring来完成吗,而我现在不用spring来完成,自己new却出现异常,请问是什么原因
...全文
190 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
GP0071 2015-07-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/gaopeng0071/article/details/46896415 看这个博客中的图二,你讲数据库连接池使用IOC容器注入,不使用IOC容器去将数据库连接池Bean注入到CommonDaoUtils中,而是自己去new一个新对象,在运行的时候肯定是空指针异常。
shmily3116 2015-07-29
  • 打赏
  • 举报
回复
spring注入的dao已经完成了数据库的相关配置,你直接new出来的dao里边是空的,什么都干不了 spring不是简单的new一下就完事了,它还会根据你配置实现dao内部属性的一些定义,如果你想自己new一个类的话,在new之后你需要手动配置dao内的数据库连接属性什么的,这才能与spring提供给你的dao对象一样
M_y_s_k_y 2015-07-29
  • 打赏
  • 举报
回复
引用 2 楼 u011274826 的回复:
你自己new的dao里不还得重新创建数据库连接吗
dao里面采用spring注入,只CommonDaoUtils这个类使用new,使用spring这样注入是没有问题的<bean class="com.bh.common.dao.CommonDaoUtils"> <property name="dao" ref="dao" /> </bean>,但我把这段代码注释掉,然后这样写就不行了,private static CommonDao dao = new CommonDao();
潇湘浪子 2015-07-29
  • 打赏
  • 举报
回复
你自己new的dao里不还得重新创建数据库连接吗
Old-Summer 2015-07-29
  • 打赏
  • 举报
回复
需要调用的那个类里不要new,应该这样, private UtilService utilService; public void setUtilService(UtilService utilService) { this.utilService = utilService; }

81,122

社区成员

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

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