关于Spring与hibernate整合的困惑

来源:互联网 发布:域名注册证书生成器 编辑:程序博客网 时间:2024/05/05 21:06

在整合Spring和Hibernate的过程中遇到一点问题。不太明白Spring是怎样将SessionFactory实例化的,我的applicationContext.xml如下配置

<!-- 自动扫描与装配bean -->    <context:component-scan base-package="com.bjwl"></context:component-scan><!-- 一、配置SessionFactory,在这里写所有的Hibernate配置        注意:hibernate配置前最好都加上"hibernate."前缀    -->    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">        <property name="dataSource" ref="dataSource"></property>        <property name="hibernateProperties">            <props>                <prop key="hibernate.show_sql">true</prop>                <prop key="hibernate.hbm2ddl.auto">update</prop>            </props>        </property>        <property name="mappingLocations">            <list>                <value>classpath:com/bjwl/domain/*.hbm.xml</value>            </list>        </property>    </bean>    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">        <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <!-- 二、配置声明式事务管理,采用基于注解的方式 -->    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <tx:annotation-driven transaction-manager="transactionManager"/>
public class HibernateTest {    //ApplicationContext ac =  new ClassPathXmlApplicationContext("applicationContext.xml");    @Resource    private SessionFactory sessionFactory;    public void test1(){        //SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");(可以获取到sessionFactory)        System.out.println(sessionFactory);//(输出为null,也就是sessionFactory没有注入)    }}

但是我改变了测试方法如下:

@Servicepublic class UserService {    @Resource    private SessionFactory sessionFactory;    @Transactional    public void saveTwoUsers() {        Session session = sessionFactory.getCurrentSession();        session.save(new Person());        // int a = 1 / 0; // 这行会抛异常        session.save(new Person());    }}@Test        public void testTransaction() throws Exception {            UserService userService = (UserService) ac.getBean("userService");            userService.saveTwoUsers();        }

这样又能够执行成功。sessionFactory注入成功。不清楚为什么会有这两种结果。希望能有高手能帮我解惑。

0 0
原创粉丝点击