spring依赖注入been后测试为啥总是获取的空呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring依赖注入been后测试为啥总是获取的空呢相关的知识,希望对你有一定的参考价值。

dao层:public class AreaTypeDAO extends HibernateDaoSupport
public List<AreaType> getAllAreaType()
return getHibernateTemplate().find("from AreaType");

service:private AreaTypeDAO areaTypeDao;
public AreaTypeDAO getAreaTypeDao()
return areaTypeDao;

public void setAreaTypeDao(AreaTypeDAO areaTypeDao)
this.areaTypeDao = areaTypeDao;

配置文件:
。。。
数据源以及sessionfactory已经配置好 就省略了。
<bean name="areaTypeDao" class="com.productSales.dao.AreaTypeDAO">
<property name="sessionFactory" ref="mySessionFactory"></property>
</bean>
<bean name="areaTypeService" class="com.productSales.flexservice.AreaTypeService">
<property name="areaTypeDao" ref="areaTypeDao"></property>
</bean>

测试的时候总是报空指针:
public static void main(String[] args)
AreaTypeService service = new AreaTypeService();
System.out.println("main.");
System.out.println(service.getAllAreaType());

参考技术A 不能这样直接NEW 出来啊 这样NEW 出来相当于没有用到配置文件里面的东西
public static void main(String[] args)
ApplicationContext context = new ClassPathXmlApplicationContext("(配置文件的路径)");
AreaTypeDao service=(AreaTypeDao ) context.getBean("areaTypeService");
System.out.println("main.");
System.out.println(service.getAllAreaType());
参考技术B 这样测试跟本就没有经过spring层,而是直接实例化的对象,既然没有经过spring层,spring肯定不能按照配置完成依赖注入。所以你需要部署到服务器,然后从浏览器访问。追问

我服务器启动了。那具体怎么测试呢?是需要从spring里getBean("")吗?那前台调用这些service方法的时候该怎么办?

追答

先写一个调用这个service的页面,打开浏览器输入http://localhost:8080/应用名/页面

参考技术C 既然托管给spring,就得去spring容器里面去拿对象,不能new了。
applicationCotext.getBean('beanName')追问

你是说service吗?刚学spring不懂啊 难道不是依赖注入 就不用拿吗 直接用的

追答

依赖注入是spring提供类与类之间相互调用的一种解耦思想,你把类配置在applicationContext.xml 中,就相当于你把这个对象的生命周期管理托管给spring了,如果你要初始化这个类就得向spring去拿它给你初始化的对象,你自己new的只是自己的对象,根spring容器根本无关,也不会提供对象注入,那么肯定是空了

追问

嗯。你的意思我理解了。但我还有个疑问 就是这是后台的方法,比如我前台(用的flex)要调用后台这些service的方法,但是flex前台是不可能从spring里getBean的,到时调用的时候那不也是要报空指针了?还是 我的服务器启动了 在浏览器里运行调用的时候 就可以直接用呢

追答

我不是很懂flex,只能用sruts2和你讲解下。
在浏览器里面通过http请求的时候,假如从页面上传过来的是一个用户信息的对象(User),在view这一层的mvc框架(struts2)会接收这个参数,然后会把service注入到这个sruts2的action中,这时候action得是交给spring管理的,然后调用service的saveUser(),从action、service、dao这三层的对象全部是交给spring管理的,spring会自动的注入你所配置的对象,就不会出现空了.

本回答被提问者采纳
参考技术D 名字没对应上吧!

以上是关于spring依赖注入been后测试为啥总是获取的空呢的主要内容,如果未能解决你的问题,请参考以下文章

普通类如何使用spring注解的been

Spring——bean的基本配置依赖注入

Spring——bean的基本配置依赖注入

Spring依赖注入

Spring笔记

Spring重温--Spring依赖注入(DI)