ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

目前在spring框架中(包括SSH、SSM)学到的各种factory工厂的区别

2020-12-09 19:01:07  阅读:220  来源: 互联网

标签:SessionFactory beanFactory spring factory 接口 SSM bean


#spring中各种工厂的区别
##前言
在2020年12月9日,我已经学了很多的关于factory工厂的知识了,但是有时候还是各种factory傻傻分不清楚,所以我还是给自己整理了一下各种factory的不同,以供自己和他人分享
###注意!!!
这部分本来就是瞎搞的,没什么意义,也不具有学科上的集思广益开发思想的意义,望谨慎对待

##beanfactory
说到Spring框架,人们往往大谈特谈一些似乎高逼格的东西,比如依赖注入,控制反转,面向切面等等。但是却忘记了最基本的一点,Spring的本质是一个bean工厂(beanFactory)或者说bean容器,它按照我们的要求,生产我们需要的各种各样的bean,提供给我们使用。只是在生产bean的过程中,需要解决bean之间的依赖问题,才引入了依赖注入(DI)这种技术。也就是说依赖注入是beanFactory生产bean时为了解决bean之间的依赖的一种技术而已。

那么我们为什么需要Spring框架来给我们提供这个beanFactory的功能呢?原因是一般我们认为是,可以将原来硬编码的依赖,通过Spring这个beanFactory这个工厂来注入依赖,也就是说原来只有依赖方和被依赖方,现在我们引入了第三方——spring这个beanFactory,由它来解决bean之间的依赖问题,达到了松耦合的效果;这个只是原因之一,还有一个更加重要的原因:在没有spring这个beanFactory之前,我们都是直接通过new来实例化各种对象,现在各种对象bean的生产都是通过beanFactory来实例化的,这样的话,spring这个beanFactory就可以在实例化bean的过程中,做一些小动作——在实例化bean的各个阶段进行一些额外的处理,也就是说beanFactory会在bean的生命周期的各个阶段中对bean进行各种管理,并且spring将这些阶段通过各种接口暴露给我们,让我们可以对bean进行各种处理,我们只要让bean实现对应的接口,那么spring就会在bean的生命周期调用我们实现的接口来处理该bean。
这是spring框架才会用的工厂

##sqlsessionfactory
首先SqlSessionFactory与SqlSession都是同一个接口

SqlSessionFactory是通过SqlSessionFactoryBuilder的build方法创建的

而build方法创建的是一个SqlSessionFactory的实现类,叫DefaultSqlSessionFactory

然后这个实现类主要用的设计模式是建造者(build)模式,而里面最终要达到的一个目的是为了创建出DefaultSqlSession,这个是SqlSession的实现类.

前面说了SqlSession也是同一个接口,那么SqlSession=SqlSessionFactory.openSession()就相当于SqlSession=DefaultSqlSession这个实现类.

那么这个实现类是干什么的呢?这个实现类可以进行增删查改以及事务操作等.

那么DefaultSqlSession是怎么进行这些操作的呢?答:通过调用Executor执行器.

所以,咱们平时见到的SqlSession.select()等等其实是在操作DefaultSqlSession.select()的方法,而DefaultSqlSession的方法其实也不是就能够实现对数据库进行操作的,而是通过调用Executor执行器来执行

而Executor执行器其实也是一个接口,而在解析配置文件的时候已经解析出来SQL,那么根据一路传过来的SQL以及参数等信息,Executor再调度StatementHandler等对象对数据库进行增删查改操作.

总结:现在你应该明白了吧,其实我们看到的都是表面,你认为的SqlSession能进行数据库操作其实不是的,是它的实现类再调用底层的Executor,底层的Executor再调度相关数据库操作对象才搞定的,而再要深入它的相关对象,那么就深似海了…

这个是给mybatis用的

##sessionfactory
1.sessionFactory 是什么

Hibernate的核心接口之一   SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

2.sessionFactory 作用

用于管理Hibernate会话(session)的对象,所以,最最最简单的理解,你可以把sessionFactory想想成里面有一个DataSource;这个对象创建了,hibernate才真正和数据库连接上了。即SessionFactory维护着所有连接对象已经连接对象的分配和销毁;SessionFactory是线程安全的,并且创建和销毁需要消耗比较大的资源,所以整个应用里面针对一个数据库只需要一个SessionFactory即可;

SessionFactory管理着配置在其中的映射对象的解析数据,动作监听器,NamedQuery等大量信息;

sessionFactory的相关方法返回session对象,而不是平常的new关键字创建session
这个是给hibernate用的

##localSessionFactoryBean
说实话这个我还没用到过,因此并不知道这个的意思
当引用LocalSessionFactoryBean 的时候,比如applicationContext.getBean("localSessionFactoryBean ")这样,spring返回的不是LocalSessionFactoryBean 本身,他会自动调用getObject()这个方法,把真正的session factory返回。用这样引用也一样,得到的都是session factory而不是LocalSessionFactoryBean 。这里代码没贴全,有兴趣的话去看看源代码。所以不需要再显式地创建一个session factory,直接引用LocalSessionFactoryBean 就可以了。

LocalSessionFactoryBean实现了org.springframework.beans.factory.FactoryBean接 口, spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口, 就会使用FactoryBean#getObject() 方法返回的对象装配,具体的可以看下文档.如果你想拿到LocalSessionFactoryBean实例, 在id前面加个’&‘就可以了,在你的配置文件中BeanFactory.getBean(’&sessionFactory’)拿到的 就是LocalSessionFactoryBean的实例

以上

标签:SessionFactory,beanFactory,spring,factory,接口,SSM,bean
来源: https://blog.csdn.net/weixin_43757056/article/details/110938232

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有