在SSH整合中,关于spring依赖注入失败的问题

我们大家都知道,spring功能是很强大的~主要体现在两个方面:一是Ioc控制反转,二是AOP面向切面思想。

spring可以托管Hibernate以及事务,并且还提供了HibernateTemplate,HibernateDaoSupport,HibernateCallBack三个类来简化Hibernante的操作

它们的作用分别是:

HibernateTemplate:所有持久化操作的门面类。它可以在不涉及sessionFactory的情况下对数据库进行操作,对于事物的关闭,打开完全自动完成。

HibernateDaoSupport:该类是用来支持dao层的操作的,通过继承该类,便可以通过内置的getHibernateTemplate()方法获得HibernateTemplate对象,并进行操作

所有继承该类的类,在依赖注入时,必须添加HibernateTemplate的注入,该来会通过内置的setHibernateTemplate()获得,除了这两个方法外,还有一个setSessionFactory()方法。

HibernateCallback:该类是个抽象类,用它允许程序猿直接面向原生的Hibernate session进行操作,比如:分与查询时,HibernateTemplate无法完成,就只有依靠它了。

以上就是Hibernate进行托管后操作的三个API了。

 

Ioc它可以对数据访问层和业务逻辑层进行依赖注入,降低二者时间的耦合度,使其之间业务分明~~~

其中,在依赖注入时,经常会出现这么个问题~~~(这才是这篇讲的重点)

 

 

有时候,我们对dao层,service层,action进行依赖注入时,经常会提示空指针异常,也就是注入失败~~~!!!

 

天哪~~找好半天还是找不到哪里错了~~~只好,利用ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");来进行加载,代用了~~

 

这样却每一点异常,正常使用~~到底是怎么回事呢???原因如下:

 

在依赖注入时,对dao层类的注入和action还不一样!!有点小差异!!

我们那个例子来解释一下,两种注入的细微的区别~:

 

对dao层的注入例子:

 

 <bean id="loginregistserviceimpl" class="com.serviceImpl.LoginRegistServiceImpl">
    <constructor-arg name="udao"><ref bean="userdaoimpl"/></constructor-arg>
    </bean>
    
    <bean id="servicemanager" class="com.serviceImpl.ServiceManager" >
    <property name="lrs"><ref bean="loginregistserviceimpl"/></property>
    </bean>


这个是很常见的吧~~没什么疑问

 

来看一下action的注入:

 

 

<bean id="servicemanager" class="com.serviceImpl.ServiceManager" >
    <property name="lrs"><ref bean="loginregistserviceimpl"/></property>
    </bean>
    
    <bean id="loginregistaction" class="com.action.LoginRegistAction" >
       <property name="servicemanager"><ref bean="servicemanager"/></property>
    </bean>


 

看到两者什么区别吗?(当然代码肯定是不一样的)

重点就在:

 <property name="servicemanager"><ref bean="servicemanager"/></property>


action注入中,必须要求action定义的变量名字和注入bean的id名字保持一致,否者注入失败~~~

 

哈哈,明白了吧!!!

 

类似一下加载的代码,在整个项目中时完全没必要出现的!!

ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		BeanFactory bf=ac;
		manager = bf.getBean("servicemanager", ServiceManager.class); 


 

还有一个小知识:

 <property name="lrs"><ref bean="loginregistserviceimpl"/></property>


以上是通过set方法注入

以下是通过构造函数注入

    <constructor-arg name="udao"><ref bean="userdaoimpl"/></constructor-arg>


今天就讲解到这里~~~

明天继续~~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值