Spring笔记(5)-SSM项目整合
SSM整合
SSM分别指代三个框架,即表示层的SpringMVC,业务逻辑层的Spring以及数据访问层的MyBatis。SSM整合即完成这三个框架的整合,在其中,Spring起关键整合作用。由于这是一个Web项目,我们还是需要准备Web项目相关环境,引入基础的依赖。然后修改对应配置完成SSM整合的工作。
Spring与SpringMVC整合
Spring和SpringMVC属于同源,我们完成SSM的整合,要到达的目的是Controller层的Bean对象交给SpringMVC管理,其他对象则交给Spring来管理,即存在两个IOC容器。由于Controller层的对象在初始化的时候,会涉及到Service层的对象,而这两层分别在不同的IOC容器中,初始化时机无法保证同步。因此,我们需要使用ContextLoaderListener
监听器来解决相关问题。
Spring提供了监听器ContextLoaderListener
,它实现了ServletContextListener
接口,可以监听ServletContext
的状态。在Web服务器启动的时候,会读取Spring的配置文件,创建Spring的IOC容器。要使用该监听器,我们需要在web.xml
中进行相关配置:
1 |
|
如果我们没有指定Spring配置文件的位置和名称,那么我们需要使用其默认的位置与名称/WEB-INF/applicationContext.xml
。如果指定了,则由我们指定的为准。
这样,在SSM整合的项目中,我们的web.xml
中应该包含Spring的编码过滤器、请求方式的过滤器、SpringMVC的前端控制器、以及Spring配置文件的监听器。这里SpringMVC的前端控制器指定了SpringMVC配置文件的位置,Spring配置文件的监听器指定了Spring配置文件的位置。
Spring与MyBatis整合
首先我们需要准备Spring与MyBatis整合的相关依赖,具体如下:
1 |
|
简单回顾MyBatis的工作原理,在MyBatis中,涉及到核心配置文件,Mapper接口以及对应的Mapper配置文件。在使用的时候,我们需要通过核心配置文件获取输入流,然后新建一个SqlSessionFactoryBuilder
对象,结合输入流来获取SqlSessionFactory
工厂对象,再通过工厂对象创建出SqlSession
对象,最终通过SqlSession
对象的getMapper方法,得到相应Mapper接口对应的实现类对象。
整合MyBatis和Spring,我们需要在Spring的配置文件中配置SqlSessionFactory的工厂Bean:
1 |
|
SqlSessionFactoryBean
是一个Factory
Bean,它提供的对象为SqlSessionFactory
类型的对象,这也就是IOC容器中管理的实际Bean对象。在其中我们可以通过属性设置MyBatis核心配置文件的路径。
当然我们也可以不设置,而是在内部将MyBatis核心配置文件中所有相关配置都进行配置,每个属性都可以找到对应的标签进行设置。这里的mapperLocations
用于设置映射文件的路径。默认映射文件和Mapper接口所在路径一致,如果我们也是按照这种方式存放,则不需要设置该属性。
我们也可以设置Mapper接口的扫描配置。这是mybatis-spring依赖提供的类,可以将指定包下所有Mapper接口创建动态代理,并将这些动态代理作为IOC容器的Bean管理,这样我们就可以直接获取到Mapper接口的实现类对象。当然这里需要满足接口和配置文件在同一个包路径下,且将basePackage属性设置为对应的包路径。
1 |
|