spring注入sessionfactory

看spring的书,书上讲解的是通过applicationcontext的getbean()方法来获得注入。

然后看了一个现成的工程,applicationcontext.xml里配了datasource和sessionfactory,然后dao类通过继承HibernateDaoSupport来获得HibernateTemplate,就可以进行持久化操作了。

然后就想学以致用,看看HibernateDaoSupport里是怎么实现的对sessionfactory的注入的。

结果发现HibernateDaoSupport类里是有setSessionFactory(),但是没看到调用applicationcontext的getbean()方法,工程里继承HibernateDaoSupport的dao中也没有相关调用。。。

各种百度之后,终于知道原因。这是因为spring的自动注入功能,我们只要在xml里为所有继承HibernateDaoSupport的dao打开autowire属性就可以啦。就像我的工程里,在<beans default-autowire="byName">里加一个如上的default-autowire属性,我们的<beans>下的所有<bean>就都具备了通过属性的名字的方式查找JavaBean依赖的对象并为其注入的功能。比如说我们的MyDao类的bean配在了该beans范围内后,MyDao继承自HibernateDaoSupport,Spring IoC容器会在配置文件中查找id/name属性为sessionfactory的bean,然后继承来的setSessionFactory()方法为其注入。

如下是关于autowier的别人那摘抄过来的详解(原文地址:http://blog.csdn.net/virgoboy2004/article/details/7525795)

当我们在使用Spring的IOC功能的时候,Spring提供了集中注入方式:属性注入,构造函数注入和工厂方法注入,我们更多的时候是使用的属性注入,即set方法注入。使用set方法注入要求我们在写bean的配置文件的时候,需要我们手动设置properties。诸如:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="testBean" class="com.jack.TestBean" scope="prototype"/>
    <bean id="testAction" class="com.jack.TestAction" scope="prototype">
        <property name="testBean" ref="testBean"/>
    </bean>

</beans>

这样使用Spring起来相当麻烦。

【问题分析以及解决办法】我们在想,会不会有那种自动注入的方法呢?就是不用我们在Spring配置文件里面写入

<property name="testBean" ref="testBean"/>

之类的语句,用某种方法让Spring自己就知道注入哪种类型的对象。

当当当当。。。。。Spring这么smart的开源框架,早就给大家想到了。。。。他就是autowire

Spring的bean有一个autowire的属性,它可以为以下的6个值。

1、 No:即不启用自动装配。Autowire默认的值。

2、 byName:通过属性的名字的方式查找JavaBean依赖的对象并为其注入。比如说类Computer有个属性printer,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为printer的bean,然后使用Seter方法为其注入。

3、 byType:通过属性的类型查找JavaBean依赖的对象并为其注入。比如类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用Seter方法为其注入。

4、 constructor:通byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。

5、 autodetect:在byType和constructor之间自动的选择注入方式。

6、 default:由上级标签<beans>的default-autowire属性确定

一般,我们在使用的时候都会用byName,这种也就是说,当我们定义bean的时候,在给bean取名的时候,约定俗成的讲bean的id设置成首字母小写的类名。在我上面的例子里面即是testBean和testAction,这样当我们在testAction里面要自动注入TestBean的时候。就要在里面写一个Set方法,当然set方法的命名也是有规范的,那就是要set+类名,这里即是setTestBean。

package com.jack;
/**
 * @author Jack Zhang
 * @version vb1.0
 * @Email [email protected]
 * @Date 2012-5-1
 */
public class TestAction
{
    private TestBean testBean;

    public void setTestBean(TestBean testBean)
    {
        this.testBean = testBean;
    }

    public String execute()
    {
        testBean.getCode();
        return "json";
    }
}

然后再更改配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="testBean" class="com.jack.TestBean" scope="prototype"/>
    <bean id="testAction" class="com.jack.TestAction" scope="prototype"autowire="byName"/>

</beans>

有的人可能还会嫌麻烦,因为这样,每一个bean都要加上这一句,很多余,哈哈哈哈,spring项目组也给大家想到了,那就是看如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
        default-autowire="byName"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="testBean" class="com.jack.TestBean" scope="prototype"/>
    <bean id="testAction" class="com.jack.TestAction" scope="prototype"/>

</beans>

Okay,问题完美解决。。。。。。。。。

时间: 2024-08-27 16:16:34

spring注入sessionfactory的相关文章

使用spring注解,注入sessionFactory类

简述 目前使用spring hibernate作为项目的框架,并且使用注解方式进行对象装载.在装载Dao对象的时候常常需要注入sessionFactory对象,通常的做法是Dao继承至HibernateDaoSuppor,t然后在Dao中添加setSuperSessionFactory 方法进行注入的,这几天网上又看到一种更好的方法,所以这里就把这两种方法都记录一下. 方法一(继承HibernateDaoSupport) 这个是比较常用的方法,看到很多文章中都使用这种方式. 前置条件: sess

使用注解为HibernateDaoSupport注入sessionFactory (转)

原文地址 http://blog.csdn.net/tsingheng/article/details/8847047 都知道spring提 供的有零配置功能,而且看见别人的一个项目使用spring+mybatis,只在applicationContext.xml里定义了 sqlSessionFactory,然后什么都不用配置了,baseDao继承自SqlSessionDaoSupport,只需要在每个dao上加 @Repository注解,spring会自动向对象中注入sqlSessionFa

spring注入与代理对象两个对象

[INFO ] 2015-05-18 15:44:37:124 [com.yjm.dao.CommonDAO] - CommonDAO...初始化... [INFO ] 2015-05-18 15:44:37:137 [com.yjm.service.FoodService] - FoodService...初始化...18794463 [email protected] [INFO ] 2015-05-18 15:44:37:336 [com.yjm.service.FoodService] 

HibernateTemplate和HibernateDaoSupport(spring注入问题)

HibernateTemplate HibernateTemplate是spring提供的一个就hibernate访问持久层技术而言.支持Dao组件的一个工具.HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只需要提供一个sessionFactory的引用就可以执行持久化操作. 该模板无需打开session及关闭Session.它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Sess

Spring配置SessionFactory

1.不用dataSource引入hibernate.cfg.xml Bean.xml代码   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"> <value>classpath:hibernate.cfg.xm

Hibernate整合Spring异常&#39;sessionFactory&#39; or &#39;hibernateTemplate&#39; is required

今日在写GenericDao时,发现了一个异常,内容如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericDao' defined in class path resource [spring.common.xml]: Invocation of init method failed; nested exception is java.lang.Ille

Spring4 整合 Hibernate3 基本使用(通过注入 SessionFactory)

Spring4 整合 Hibernate3 基本使用(通过注入 SessionFactory) Spring4 整合 Hibernate3 基本使用通过注入 SessionFactory 步骤 1 导入 Maven 依赖 步骤 2 编写 beans 核心配置文件 步骤 3编写实体类 步骤4编写基于 Hibernate 的 DAO 层 步骤5编写测试方法 进一步研究 步骤 1 :导入 Maven 依赖 1.Spring4 的模块 spring-core.spring-context.spring-

spring管理SessionFactory中XML配置

1. 综合练习目标 2. 综合练习需求 3.模块划分 1. 综合练习目标 <1>复习 Java 基本语法 <2>熟悉掌握Java开发常用API <3>尝试建立面向对象思想 2. 综合练习需求 <1>接收用户的命令行输入 <2>以文件为基础完成数据的增删改查操作          3.模块划分 UI模块:(Java存在文本中都是以字符型式) 数据验证模块:验证用户输入是否合法 spring管理SessionFactory中XML配置,布布扣,bub

SSH框架系列:Spring读取配置文件以及获取Spring注入的Bean

分类: [java]2013-12-09 16:29 1020人阅读 评论(0) 收藏 举报 1.简介 在SSH框架下,假设我们将配置文件放在项目的src/datasource.properties路径下,Spring的配置文件也是src/applicationContext.xml路径下,那么我们可以借助Spring的property-placeholder读取配置文件,然后注入Bean中.我们在程序中,可以根据Bean的Id,获取注入的值.这样我们就可以借助Spring来读取配置文件. 2.