这一周的学习内容包括:mybatis、spring的个层次,spring ioc/aop/mvc,这些内容的理解需要深度记忆,因为有些概念不太好理解。而且这一周周末由于搬家的原因,导致没有好好复习,下一周要好好努力赶上进度。
1.mybatis
mybatis是支持普通SQL语句查询,存储过程和高级映射的优秀持久层框架,mybatis可以使用简单的xml和注解用于配置和原始映射,将接口和Java的POJO(plain old java objects)即普通Java对象映射成数据库中的记录。
每一个mybatis的应用程序都以一个sqlSessionFactory对象的实例为核心,sqlSession由sqlSessionFactory创建,sqlSession完全包含以数据库为背景的所有执行SQL操作的方法,可以用它来直接执行已映射的SQL语句。
配置mybatis的xml文件必须要有头部申明,以及五个元素:environments environment dataSource transactionManager mapper.
mybatis中最具有魅力的是动态sql语句和resultMap,其中动态sql语句采用与jstl类似的标签来生成sql语句。如<if test=""></if> <choose><when></when>...<otherwise></otherwise></choose> <where></where> <set></set> <foreach></foreach> <sql id=""></sql>标签中的sql语句片段可以重用(和<include refid=""/>配合使用)。
resultMap:完成关系映射,一对一,一对多,多对多的场景下使用<collection></collection> 而多对一情况下使用 <association></association>,还有鉴别器<discrimination></discrimination>可以将结果集按照配置进行分类。
对于主键自增,如果数据库支持自动自增,则可以直接用userGeneratedKeys="true" keyProperty="id" 若是不支持,则需要加上<selectKey keyProperty="" order="BEFORE"></selectKey>标签,包含序列产生语句。
statementType属性用于支持STATEMENT,PREPARED和CALLABLE语句的映射类型,设置为callable时,可以使用{call procedureName()}来调用存储过程或函数
2.spring
spring是分层次的框架,每个层次都能独立使用,且与其他框架整合,
2.1,spring中核心容器的主要组件是beanFactory,它是工厂模式的实现,beanFactory使用控制反转(ioc)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开,使用spring,你不必在程序代码中强维护对象的依赖关系,只需要配置文件中加以设定,spring的核心容器会自动根据配置将依赖注入指定的对象。
控制反转反转的是什么?反转的是组件之间的依赖关系的创建方式,组件本身不主动与其他组件建立直接的关系,依赖将在组件以外的某个地方(组件管理者或容器)建立。想用容器给组件注入依赖,组件需要给容器预留一些注入依赖的方法(callback),有三种:1,通过接口,2,通过setter,3,通过构造函数。spring提供方式2和3的ioc实现。
分层结构:表示层---业务逻辑层---数据访问层---数据库;面向接口编程:利用接口可以忽略不同底层的实现,用统一的方式进行调用。
在spring的配置文件中,<bean></bean>标签的scope属性有"singleton"(每次返回相同的实例),"prototype"(每次返回不同的实例),default-autowire="ByName"和"ByType"两种,byname根据属性名字来自动装配,而byType由类型匹配来自动装配,一般使用ByType。spring有两种加载方式,立即加载和延迟加载。默认为立即加载。
2.2,Spring上下文,spring上下文是一个配置文件,向spring框架提供上下文信息;
2.3,spring aop,通过配置管理特性,spring aop模块直接将面向方面的编程功能集成到了spring框架中,能容易的使spring框架管理的任何对象支持aop,aop中为这些对象提供了事务管理服务,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序当中。
定义和概念:切入点pointcut,通知advice,面向方向模块advisor,aop代理。普通代理和动态代理都是 :1,先把需要被代理的方法在接口中声明,然后写被代理类Target类,再写代理类,代理类不关心业务逻辑,只专注于事务处理,所以要引入被代理类。
分离关注:所谓分离关注就是将某一通用的需求功能从不相关的类之中分离出来;这样使很多类共享一个行为,并且一旦行为发生改变,也不必修改很多类,只要修改这个行为就行。设计模式追求的就是调用者和被调用者之间的解耦。
AOP的核心思想就是将应用程序中的业务逻辑处理部分同对其提供支持的通用服务,即所谓的“横切关注点”进行分离,这些“横切关注点”贯穿了程序中的多个纵向模块的需求。
动态AOP,使用JDK的动态代理API或字节码Bytecode处理技术,基于动态代理API的具体项目有:JBoss4.0,JBoss4.0服务器,基于字节码的项目有:aspectwerkz,spring.
横切关注点,在一个服务流程中插入与业务逻辑无关的系统服务逻辑,这样的逻辑被称为cross-cutting concerns,如logging,security;
切面aspect,将散落在各个业务对象之中的cross-cutting concerns收集并独立起来,设计为各个独立的可重用的对象,这些特殊对象就是Aspect,切面用spring的advisor或拦截器实现。
连接点joinpoint,程序执行过程中明确的点,如方法的调用或异常的抛出点,在spring的AOP实现中,连接点总是一个方法调用。
通知advice:在特定的连接点,AOP框架执行的动作。spring是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。
切入点pointcut:指定一个通知将被引发的一系列连接点的集合。advisor = advice + pointcut
引入,目标对象,AOP代理,织入(weave),织入方式有几个时间点,编译时期,类加载时期,执行时期,spring在运行时期完成织入。
CGLIB代理与动态代理的区别:前者是通过在运行期产生目标类的子类来进行工作的,后者是通过代理一个过或多个接口。
2.4,spring mvc,mvc框架是一个全功能的构建web应用程序的mvc实现,通过策略接口,mvc框架变成高度可配置的。