Spring框架

Spring框架
    Spring的概述
        起因
            Spring的出现是因为当时SUN公司EJB的失败 尤其是EJB2的时代,EJB2需要许多配置文件,还需要配合很多抽象概念才能使用。
            虽然EJb3克服了配置方面的冗余 但是对于Javaee的开发而言 更为致命的是对EJb容器的依赖,  应用可以通过容器获得对应的Bean
            EJB的缺点
                rjb容器十分复杂
                没有一个很好的设计理念 导致代码的可读性很差,导致后期的维护和开发很难
                大量使用try catch  finally    大多的程序员滥用 导致代码非常复杂
                使用EJB需要从EJB容器中 获取服务,但是测试人员需要对面一个对象深度剖析,没有必要,导致测试人员的工作量很大
                很多框架都有入侵性,也就是依赖性太严重
            ejb3的缺点
                首先他比较缓慢,容器中需要调用大量的远程调用 反射 代理 徐丽华和反序列化等复杂的操作
                对EJB容器依赖比较重,难以带到快速开发和测试的目的
        Spring框架的成功不在于它的技术 而在于他的理念,他最为核心的理念是Ioc (控制反转) 和AOP(面向切面编程) 其中IOc是spring的基础,而AOP其的重要功能,最为典型的是数据库事务的使用
        Spring
            作者
                RodJohnson
            优点
                他是程序员乐意去使用的框架
                他不依赖于Spring所提供的API 也就是无浸入性和低侵入性。也就是Java应用离开了Spring依然能用
                Spring不是去取代原有的框架,而是将之前的框架 整合到Spring中
            Spring提供的策略
                对于POJO的编程 提供了  配置 xml和注解来扩展POJO
                    POJO
                        POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
                        一个普通的java类对象 主要应用在数据库  作为对象的类
                提供切面编程
                提供了模板类,将各种技术整合到Spring中
    他的理念包括
        Ioc(控制反转)
            SpringIoC概述
                有点面向对象的意思
                Spring Ioc里面装在的各种Bean,也可以理解为各种资源
                Ioc是一个容器,在Spring中,他会认为一切java资源都是javaBean,容器的木匾就是管理这些Bean和他们之间的关系
                控制反转
                    其中的控制权在SpringIoc容器中,他会根据描述找到使用者需要的资源,这就是控制反转的含义
                    控制反转是一种通过描述 (在java中如 注解和 xml) 并通过第三方去产生获取特定的对象的方式
                    将不同的事务交给不同的对象(接口) 去做
                    实现控制反转的是IOC容器
                        方法
                            依赖注入
                本质目的
                    就是管理Bean
                创建模式
                    优点
                        降低对象之间的耦合
                    主动创建模式下 
                        责任归于开发者 
                    被动创建模式下
                        责任归于IOc容器
                            对象被控制反转了
                喝果汁的两种方式
                    主动创建对象
                        自己去买  原料和搅拌机
                    被动创建对象
                        去商店买,下订单
            javaBean简介
                JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
                装配 SpringBean
                    实现SpringIoc 的方式
                        依赖查找
                            通过资源定位符 进行查找
                        依赖注入
                            依赖注入的三种方式
                                构造器注入
                                    原理
                                        主要是通过java的反射技术
                                    缺点
                                        可读性差,因为他没有指定变量名而是采用坐标的方式
                                setter注入
                                    setter注入方式是Spring中最主流的的注入方式
                                    优点
                                        灵活且可读性高
                                接口注入
                                    不常用  主要是来源是外界
                                    Spring的IOc容器中获得Tomcat所管理的数据库连接池
                    转配Springbean概述
                        Spring中三种配置方式
                            在xml中显示配置
                            注解
                            java类
                Spring Bean的生命周期
                    主要是为了了解SpringIoc容器初始化和销毁Bean的过程
                    学习如何在初始化和销毁的时候加入自定义的方法
                JavaBean的创建 时间行为等他们有Ioc容器管理
                Spring是依靠描述来完成对象的创建及其依赖关系
            Spring IOc容器
                SpringIOc容器的设计
                    主要是基于BEanFactory和 其子接口  ApplicationContext两个接口
                    在通常情况下  一般是使用applicationContext接口   他实现了 Beanfactory接口, 并且他还有扩展了很多其他的接口  比如环境接口和 信息资源接口 和其他资源接口
                    会使用application的实现类ClassPathXmlApplicationContext去初始化Ioc容器 然后 开发者就可以通过Ioc容器来获取资源
                Springioc容器的初始化 和依赖注入
                    Bean在容器中,先定义 后初始化和依赖注入
                    只有在使用时,才会去初始化Bean
                bean的定义
                    Resource的定位
                        资源定位
                    BeanDefinition的载入
                        将定位到的信息保存到Bean容器中
                    BeanDefinition的注册
                        将BeanDefinition的信息发布到SpringIoc容器中
        AOP(面向切面编程)
            简介
                SpringAOP常用于数据事务的编程
                在SpringAOP实现的数据库事务管理中,是以异常作为消息,只要Spring接收到了异常消息 他就睡将数据库的事务回滚,从而保证数据的一致性
                AOP的概念和使用原因
                    意义
                        首先 ,他可以拦截一些方法 然后把各个对象组织成一个整体
                     AOp 是通过动态代理模式,带来管控各个对象操作的切面环境
                Spring 对 AOP的支持 
                    AOP不是java 所私有的,Spring只是有AOP的框架之一
                    使用@aspectJ 注解开发  Spring AOP
                    使用XMl配置文件开发SpringAOp
                面向切面编程
                    如果说Ioc是Spring的核心,那么面向切面编程就是Spring最为重要的功能之一
                    在数据库事务中切面编程被广泛使用
                    AOP原理是Spring技术中最难理解的一部分
                    一个简单的约定游戏
                        通过接口 实现一个拦截器
                        通过接口去实现一个产品的类对象
                        数据库实现了拦截器
                        通过作者写的代码实现 关联
                            通过jdk动态代理实现的
                切面编程的术语
                    切面
                        在一个怎样的环境中工作
                    通知
                        切面的方法,比如拦截器
                        比如  before,after
                    引入
                        引入我们现有类的自定义方法和类
                    切点
                        这是一个高速Spring AOp 在什么时候启动拦截并植入 对应的流程中,他往往需要正则来限定  启动
                    连接点
                        链接点  对应的事具体需要拦截的东西  ,比如 产品的方法
                    织入
                        织入 是一个生成代理对象并将切面内容放入到流程中的过程
            AOP应用
                SPring 和数据库编程
                    SPring 最重要的功能毫无以为就是操作数据
                    数据库编程 是互联网编程的基础
                    Spring  对已有的框架提供支持
                        Hibernate
                            支持
                        Mybaties
                            不支持,但是mybaite 社区提供了开发Spring的开发包
                    传统jdbc代码的弊端
                        太多的trycatch 代码块 ,导致代码冗余
                    配置数据库资源
                        在实际工作中大部分会 配置为数据库连接池
                        获取数据源
                            使用SPring内部提供的类
                            使用第三方方数据库连接池
                            从web服务器中通过jndi获取数据源
                    jdbc代码失控的解决方案
                        jdbcTemplate
                            虽然不算成功,但是体现了 SPring框架的主导思想之一
                                给予常用个技术提供模板化的编程  减少了开发者的工作量
                            jdbcTemplate的增删改查
                    Mybatis -Spring 项目
                        目前大部分的java互联网项目,都是用Spring MVC  + mybatis  + Spring  搭建平台的
                        使用Spring IOc  可以有效的管理 各类的java 资源 达到即插即拔的功能
                        通过 AOP 框架,数据事务委托给Spring处理,消除很大一部分的事务代码
                        配合Mybatis的搞灵活 可配置 可优化SQL、完全可以构建高性能的大型网站
                        mybatis和Spring 框架的结合的好处
                            使业务层和模型层得到了更好的分离
                            在SPring 环境中使用mybats 更加的简单,  节省了 不少代码,甚至可以不用SqlSessionFactory,SQlSession等对象,因为  mybatis为我们封装了他们
                深入Spring数据库事务管理
                    数据库事务 是企业应用 最为重要的内容之一
                    Spring数据库事务 管理器的设计
                        在Spring中可以使用声明式事务
                            声明式事务 可以分为xml配置 和注解事务,但是 xml也不常用了,目前主流方法是注解@Transactional
                            声明事务是一种约定型的事务
                        或者是编程式事务
                            现在已经不用了  主要原因就是产生冗余,代码可读性较差
                            换句话说,事务将开发者通过自己的代码来实现 
                    数据库的相关知识
                        数据库事务acid特性
                            原子性
                                要么全部完成 ,要么全部不完成
                            一致性
                                事务必须始终保持系统保持一个状态
                            隔离性
                                它是指连个事务之间的隔离程度
                            持久性
                                该事务对数据库所做的更改便持久保存在数据库之中
                        丢失更新
                            第一类丢失更新
                                数据变少
                            第二类丢失更新
                                数据变多
                        隔离级别
                            脏读
                            读/写提交
                            可重复读
                            序列化
                                为了克服幻读
                                    就是修改了  但是有几个新加的没有修改  导致 第一个事务 出现幻觉

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值