SSM
什么是SSM?(二八)
如果我们把 SSM + 另外一些功能的框架看成一台台式电脑,主机上插了键盘、鼠标、显示器、优盘、音响……那么 Spring 框架好像是电脑的主机,Spring MVC类似于显示器(Web交互很漂亮,对不对),MyBatis好比是个硬盘(移动硬盘、优盘),其他的功能框架如安全框架 Shiro 好比是个指纹登录器。这些东西是不是都是插主机上的?
SSM搭建的版本有很多,例如有一个版本可以这么搭建,
两个核心配置文件web.xml,applicationContext.xml。
1.前端控制器DispatcherServlet
2.过滤器CharacterEncodingFilter
applicationContext.xml
1.扫描包 <context:component-scan base-package="cn"/>
2.mvc驱动 <mvc:annotation-driven/>
3.事务驱动 <tx:annotation-driven transaction-manager="txManager"/>
4.配置数据源
5.SqlSessionFactoryBean
6.配置事务
7.数据映射器
8.视图解析器
什么是spring?(容器框架、两大特性)
它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
在spring出来之前,service层调用dao层都是用new的方式。我们需要创建大量的对象,有些重要的对象牵一发而动全身。
在spring出来之后,service层和dao层都会放在spring容器去管理,这是spring的第一种特性,我们称之为IOC,控制反转。对象我们可以交给Spring帮我们来创建,我们只需要提供配置文件,这个配置文件可以是xml,也可以是java本身。好比Spring是个工厂,按图纸就可以做出产品。
spring还有一种特性,我们称之为AOP,大白话,“面向切面”,说白了就是专门的人干专门的事。在项目很多公有的或是要被重复被调用的模块可以被抽取出来,利用的就是AOP的特性,例如日志模块。
什么是IOC(Inversin of control)?
在以往的工厂模式中,我们创建一个对象都是以new的形式创建一个新的对象,而在spring中,所有的对象都是以bean的形式存在,由spring控制bean对象的产生,这样的控制权改变的情况,我们称为控制反转。
什么是AOP (Aspect-Oriented Programming)?
AOP,面向切面编程,通过配置文件来实现模块和模块、对象和对象的分离,在这种工作模式下,我需要一个业务功能时,不需要再去编写它的java类,而只需要调用它暴露的接口即可,这样可大大降低开发成本以及开发周期。在AOP中,有两种代理模式,一种是静态代理,一种是动态代理。静态代理中,可以针对每一个具体的类分别编写代理类,也可以针对一个接口编写一个代理类。在动态代理中,针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各个接口动态生成相应的代理类。
Bean的生命周期
1、Spring实例化一个Bean
2、Spring对Bean进行依赖注入
3、如果bean实现了BeanNameAware接口,spring将Bean的id传给setBeanName()方法
4、如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来
5、如果bean实现了ApplicationContextAware接口,会调用setApplicationContext()方法,传入spring上下文
6、如果bean实现了BeanPostProcessor接口,将调用postProcessBeforeInitialization方法,BeanPostProcessor经常被用作是Bean内容的更改,并且这个实在Bean初始化结束是调用的方法,也可以被应用于内存或缓存技术
7、如果bean实现了InitializingBean接口,spring调用afterPropertiesSet接口方法,类似如果Bean在Spring配置文件中配置类init-method属性会自动调用起其配置的初始化方法
8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization接口
9、此时bean已经准备就绪可以被使用,将一直驻留在应用上下文中,直到被销毁
10、Bean不再需要时,如果Bean实现了DisposableBean接口,会调用distroy()方法,同样如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用
总结:Bean定义——Bean初始化——Bean调用——Bean销毁
spring的核心机制:依赖注入
其实不管是依赖注入DI(Dependency Injection)还是控制反转,其含义是完全相同的。
当某个java实例(调用者)需要调用另一个java实例(被调用者)时,在传统情况下,通常情况下,通过调用者来创建被调用者的实例,通常通过new来创建,而在依赖注入的模式下,创建被调用者的工作不在由调用者来完成,因此称之为“控制反转”,创建被调用者实例的工作通常由spring来完成,然后注入调用者,所以也称为“依赖注入”。
依赖注入一般有3种方式:setter interface constructor
设置注入:IOC容器使用属性的setter方式注入被依赖的实例。<property name = "" ref = "">
构造注入:IOC容器使用构造器来注入被依赖的实例。 <constructor-arg ref = "">
配置构造注入的时候可以配置index属性,用于指定该构造参数值作为第几个构造参数值,下标从0开始。
spring有2个核心接口:BeanFactory 和 AppilicationContext(基于XML),其中ApplicationContext是BeanFactory的子接口,他们都可以代表spring容器。
spring框架的7个模块:
spring-core 核心容器提供spring框架的基本功能,核心容器的主要组件是BeanFactory,它是工厂模式的实现,BeanFactory使用控制反转模式将应用程序的配置和依赖性规范与实际的应用程序代web码分开。
spring-context
上下文,spring上下文是一种配置文件,向spring框架提供上下文信息,spring上下文信息包括企业服务,如JNDI\EJB\电子邮件\校验\调度等
spring-aop
通过配置管理特性,spring-aop模块直接将面向切面的编程功能集成到spring框架中,所以很容易使spring框架的管理的任何对象支持aop
spring-dao
spring-orm
spring-web
spring-mvc
什么是Mybatis?(持久层框架,与JDBC对比,与hibernate区别)
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc(JDBC:一套接口,java语言连接数据库),使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。它使用了ORM思想实现了结果集的封装
我们说JDBC使用到的对象有Connection对象,PreparedStatement对象,ResultSet对象。
而Mybatis框架的核心对象有SqlSessionFactoryBuilder对象,SqlSessionFactory对象,SqlSession对象。
并且myibatis框架和hibernate框架最大的区别就在于mybatis它的灵活性比较高。
ORM思想:
object Relational Mapping 对象关系映射
就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表
缓存
存在内存中的临时数据,减少和数据库的交互次数,提高执行效率
适用于缓存:经常查询并且不经常改变,数据的正确与否对最终结果影响不大的。
不适用于缓存的:经常改变的数据,或者数据的正确与否对最终结果影响很大的。
一级缓存:指mybatis中sqlsession对象的缓存,查询之后,结果会同时存入到sqlsession提供的一块区域中,该区域的结构是一个Map,当我们再次查询同样的数据,mybatis会先去sqlsession中查看是否有,有的话直接拿出来用,当sqlsession对象消失时,mybatis的一级缓存也就消失了
mybatis中的对一和对多关系怎么配置
对一,有两种。一种是嵌套结果 ,一种是嵌套查询
通过定义resultMap 在里面再定义一个association,用javaType指定全类名。这两个的主键id标明是哪一个。
嵌套结果
通过定义resultMap 在里面再定义一个collection,通过select属性指定第二条sql语句,在这个collection上面指定列column的数据的主id
一对多 定义association 用javaType指定全类名
对多就用resultMap封装 ,在里面用collection,通过ofType指定要封装的全类名,当然id还是要指明。
什么是SpringMVC?(设计模式,基本原理)
mvc是一种设计模式,即model-view-controller。
当用户发送请求到springmvc中的前端控制器中,通过映射器和适配器返回ModelAndView对象到客户端。这就是SpringMVC的基本原理。
你去饭店吃饭,坐下来后,服务员小妹来找你点菜。你点了个宫保鸡丁,小妹就拿着你的点菜单都后厨。后厨的师傅打开食物储藏柜,找到鸡丁,开炉子,放油,一顿爆炒,装盘。小妹端起盘子回到你的桌子。当然,如果小妹觉得你帅,说不定还会偷偷加个鸡腿给你;如果你碰巧是当年甩了小妹的前男友,说不定小妹会吐口口水在里面。
这里,你就是客户,你点菜就是发出请求(Request),小妹就是Controller,后厨就是 Model,小妹最后给的盘子及里面的内容就是View,小妹给你盘子就是响应(Respond)。Controller处理客户请求,反馈给Model。Model处理,返回数据(宫保鸡丁)给Controller(小妹)。小妹可以直接给你,也可以给你加鸡腿或吐口水后给你。最终,你得到了一盘吃的(View)。Spring MVC就是个MVC框架,和Spring天生就集成。
用户发送请求到dispatcherServlet
dispatcherServlet收到请求调用HandlerMapping处理器映射器
处理器映射器找到具体的处理器(xml配置、注解),生成处理器对象以及拦截器并且返回给DispatcherServlet
DispatcherServlet调用HandlerAdapter处理器适配器
HandlerAdapter经过适配器调用具体的处理器(Controller,也叫后端控制器)
Controller执行完成返回ModelAndView
HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
DispatcherServlet将ModelAndView传给ViewReslover视图解析器
视图解析器解析后返回具体的view
DispatcherServlet根据View进行视图渲染,即将模型数据填充到视图中
前端控制器响应客户
浙公网安备 33010602011771号