SSM框架知识点

SSM框架:
    Spring:
        Spring是一个粘合剂,可以整合其他框架进行工作
        Spring的主要技术是IOC和AOP
        IOC:
            依赖注入,控制反转,简单来说就是将对象的创建权力和生命周期管理过程交由Spring来处理,在开发过程中不在需要关注对象的创建和生命周期管理,
            而是在需要时从Spring容器中获取,这个由Spring来创建对象和管理对象生命周期的机制称为控制反转
            IOC不是技术,而是一种设计思想,IOC意味着将你设计好的对象给容器控制,而不是传统的在你的对象内部直接控制,
            IOC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么对象都是主动创建,
            但是在IOC/DI思想中,应用程序就变成被动的了,被动的等待IOC容器来创建并注入它需要的对象
            IOC很好的体现了面向对象的设计法则:由IOC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找
            注入方式:接口注入 && set方法注入 && 构造器注入 && 注解注入
                接口注入:
                    接口注入模式因为具备侵入性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限。
                set方法注入:
                    对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用。
                构造器注入:
                    在构造期间完成一个完整的、合法的对象。所有依赖关系在构造函数中集中呈现。依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。只有组件的创建者关心其内部依赖关系,对调用者而言,该依赖关系处于“黑盒”之中。
                注解注入:
                    @Resource先会按照名称到spring容器中查找,如果查找不到,就回退按照类型匹配,如果再没有匹配到,就会抛出异常。如果在开发的时候,建议大家都是用@Resource(name=”userDao”),此时只能够按照名称匹配
            无论是控制反转还是依赖注入对编程带来最大的影响不是从代码上,而是思想上转变,发生了“主从换位”的变化。应用程序原本是老大,
            要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入她所需要的资源了。
            这一举动,有效的分离了对象和她所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
        AOP:
            AOP面向切面编程,OOP面向对象编程,AOP是OOP的延伸
            OOP引入封装、继承和多态性(重载/重写)等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。
            当我们需要为分散的对象引入公共行为的时候,OOP显得无能为力,oop允许你定义从上到下的关系,但并不适合定义从左到右的关系。
            例如日志、异常、安全性、性能统计、事务处理等功能。日志代码往往水平地散布在所有对象层次中,而与对象的核心功能毫无关系。
            这种散布在各处的无关的代码被称为横切代码,在oop设计中,它导致了大量代码的重复,模块间的耦合度高,而不利于各个模块的复用
            简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少重复代码,降低模块间的耦合度,有利于未来的扩展性和可维护性。
            切面:一个关注点的模块化,这个关注点可能会横切多个对象。基于@Aspect注解的方式来实现。
            @Aspect:把当前类标记为一个切面类
            @Pointcut:切入点,例如定义切入点表达式 execution (* com.sample.service.impl..*. *(..))
                execution()是最常用的切点函数,其语法如下所示:
                整个表达式可以分为五个部分:
                1、execution(): 表达式主体。
                2、第一个*号:表示返回类型, *号表示所有的类型。
                3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service.impl包、子孙包下所有类的方法。
                4、第二个*号:表示类名,*号表示所有的类。
                5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数
            @Before:标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有
            @After: final增强,不管是抛出异常或者正常退出都会执行
            @AfterThrowing:异常抛出增强,相当于ThrowsAdvice
            @AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行
            @Around:环绕增强,相当于MethodInterceptor
        Bean的生命周期:
            ①通过构造器或工厂方法创建bean实例
            ②为bean的属性设置值和对其他bean的引用
            ③将bean实例传递给bean后置处理器的postProcessBeforeInitialization()方法
            ④调用bean的初始化方法
            ⑤将bean实例传递给bean后置处理器的postProcessAfterInitialization()方法
            ⑥bean可以使用了
            ⑦当容器关闭时调用bean的销毁方法
                
    SpringMVC:
        SpringMVC是一个WEB层框架,主要用来负责与页面的交互
        Spring整合SpringMVC可以做到无缝集成。特点就是简单易用性能佳
        SpringMVC和Spring的关系:
            SPringMVC是SpringWeb框架的一部分
            SpringMVC是一个MVC的Web层框架
            SpringMVC和Spring是父子容器,浑然天成;而struts2等是需要单独进行整合;
        请求流程:
            1.前端请求被DispatcherServlet(前段控制器)接受
            2.DispartcherServlet调用HandleMapping,HandleMapping中有个Map,在程序启动时根据xml配置文件或者注解加载Handle到Map容器,
              根据请求的URI在Map中匹配查找Handler处理器
            3.生成Handler以及handlerInterceptor
            4.返回HandlerExecutionChain(Handler+HandlerInterceptor)
            5.DispatcherServlet通过HandlerAdapter去执行相应的Handler
            6.Handler返回一个ModelAndView
            7.通过ViewResolver(视图解析器)进行解析
            8.视图解析器返回填充了模型数据的视图View,最后展示给前端

        SpringMVC的组件:
            前端控制器(DispatcherServlet)
                本质上是一个Servlet,相当于一个中转站,所有的访问都会走到这个Servlet中,再根据配置进行中转到相应的Handler(Controller)中进行处理,获取到数据和视图后,在使用相应视图做出响应。
            处理器映射器(HandlerMapping)
                本质上就是一段映射关系,将访问路径和对应的Handler(Controller)存储为映射关系,在请求时匹配查询Handler。
            处理器适配器(HandlerAdapter)
                本质上是一个适配器,可以根据要求找到对应的Handler(Controller)并执行。前端控制器通过处理器映射器找到对应的Handler信息之后,将请求响应和对应的Handler信息交由处理器适配器处理,处理器适配器找到真正handler执行后,将结果即model和view返回给前端控制器
            视图解析器(ViewResolver)
                本质上也是一种映射关系,可以将视图名称映射到真正的视图地址。前端控制器调用处理器适配完成后得到model和view,将view信息传给视图解析器得到真正的view。

    Mybatis:
        MyBatis是一个半自动ORM的持久层框架。
        常见的数据层访问方式比较
        JDBC:
            1.java原生的关系型数据库访问方式
            2.每次操作数据库都需要获取连接关闭连接,在大量访问数据库时,频繁的开关连接消耗性能。
            3.需要手动编写sql,有学习成本
            4.查询出的结果需要手动进行封装到bean
            5.没有缓存处理机制
            6.sql语句写死在程序中,需要修改sql必须修改源文件
        Hibernate
            1.基于面向对象理念设计的DAO层框架,基本理念就是维护对象到表的映射关系,通过操作对象操作表中的数据,从而可以减少甚至杜绝sql的使用
            2.相对比较沉重,效率不好
            3.当涉及到比较复杂的查询时Hibernate的操作对象的方式用起来非常麻烦,甚至无法实现,只能用sql操作
            4.底层需要频繁的拼接sql,产生大量冗余的sql
        MyBatis
            特点:
                mybatis是一种持久层框架,也属于半自动ORM映射。前身是ibatis。
                相比于hibernate为全自动化,配置文件书写之后不需要书写sql语句,但是欠缺灵活,很多时候需要优化;
                mybatis为半自动化,需要自己书写sql语句,需要自己定义映射。增加了程序员的一些操作,但是带来了设计上的灵活,
                并且也是支持hibernate的一些特性,如延迟加载,缓存和映射等;对数据库的兼容性比hibernate差。移植性不好,
                但是可编写灵活和高性能的sql语句。
            优缺点:
                1.sql语句与代码分离,存放于xml配置文件中:
                    优点:便于维护管理,不用在java代码中找这些语句;
                    缺点: JDBC方式可以用用打断点的方式调试,但是Mybatis不能,需要通过log4j日志输出日志信息帮助调试,然后在配置文件中修改。
                2.用逻辑标签控制动态SQL的拼接:
                    优点:用标签代替编写逻辑代码;
                    缺点:拼接复杂SQL语句时,没有代码灵活,拼写比较复杂。不要使用变通的手段来应对这种复杂的语句。
                3.查询的结果集与java对象自动映射:
                    优点:保证名称相同,配置好映射关系即可自动映射或者,不配置映射关系,通过配置列名=字段名也可完成自动映射。
                    缺点:对开发人员所写的SQL依赖很强。
                4.编写原声SQL:
                    优点:接近JDBC,比较灵活。
                    缺点:对SQL语句依赖程度很高;并且属于半自动,数据库移植比较麻烦,比如mysql数据库编程Oracle数据库,部分的sql语句需要调整。
            MyBatis的缓存机制:
                缓存机制可以减轻数据库的压力,原理是在第一查询时,将查询结果缓存起来,之后再查询同样的sql,不是真的去查询数据库,而是直接返回缓存中的结果。
                缓存可以降低数据库的压力,但同时可能无法得到最新的结果数据。
                MyBatis的一级缓存
                    MyBatis的一级缓存默认就是开启的,也可以通过配置禁用一级缓存
                MyBatis的二级缓存
                    MyBatis的二级缓存默认是关闭的
            接口的使用
                为了简化MyBatis的使用,MyBatis提供了接口方式 自动化 生成调用过程,可以大大简化MyBatis的开发
                开发接口:接口的名字和映射文件的名字相同,接口中方法的名字和要调用的映射文件中的标签的id相同,方法的参数和被调用的标签中的sql中需要的参数对应
                真正的开发中,都是使用这种接口+配置文件方式,实现MyBatis的使用。
            
            常用的标签:
                select insert update delete if foreach selectKey include sql where trim set choose collection 
            
            其他:#{}取值自动增加双引号,能够防止sql注入,而且#{}格式的sql能够预编译,能再内存中保存sql语法,不用重新组装sql语法
                  ${}取值不带双引号,如需传入表明、排序字段名可使用,但不安全,有sql注入风险
                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值