发表于: 2018-03-21 21:25:19
2 645
今天完成的事情:
1,学习单例,多例模式
2,学习延迟加载
3,mybatis,spring笔记整理
通过匹配id来创建对象属于单例
如果有多个接口,那么就可以考虑使用多例模式,不需要一一配置。
结论:多例模式下,如果有多个mapper接口,就不需要一一配置,直接通过接口名称来生成对象,调用函数。
延长加载
延长初始化,在需要时被创建,降低内存消耗
如果需要配置整个xml文件的bean都延迟加载则使用defualt-lazy-init属性,注意lazy-init属性会覆盖defualt-lazy-init属性。
Mybatis笔记整理:
Mybaits是一个持久层框架,对操作数据库的操作过程进行封装,将sql分离出来。
Mybatis通过java对象和statement中的sql进行映射,生成用于执行的sql,然后框架执行,生成java对象返回。
XML注解模式
Mybatis需要一个全局配置,以及若干mapper映射文件
通过配置,生成会话工厂,会话工厂创建会话,用于操作数据库。会话执行一条sql语句,便生成一个statement对象,statement对象通过对输入参数进行处理,并输出java对象。
分为传统DAO模式和mapper代理模式
传统DAO模式
1.dao接口中存在大量模版方法,能否把这些代码提出来,减少我们的工作量
2.调用sqlSession方法时将statement的id硬编码了
3.调用sqlSession传入的变量,由于sqlSession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序开发。
Mapper代理方法
只需要mapper接口,相当于dao接口,不需要接口实现类
知识点
1,编写XXXmapper.xml的映射文件
2,编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。
注意事项
1,mapper.xml文件中Namespace需要写入mapper接口的全限定名称
2,XXXmapper.java接口中的方法和mapper.xml中的statement的Id一致。
3,mapper.java接口中的方法输入参数和mapper.xml中statement的parameterType指定的类型一致。
4,mapper.java接口中的方法的返回值类型和mapper.xml中statement的resultType指定的类型一致。
使用时创建mapper对象,mybatis会自动生成mapper代理对象
Mybatis注解模式
全局配置是相同的,但不需要映射文件。
通过使用注解@Select,@Insert,@Update,@Delete来操作数据库。
手动注册mapper代理,增删改之后提交事务
Spring笔记整理:
反射:根据完整类名来动态生成对象
IOC:使一个对象依赖其他对象时通过被动的方式传入进来,而不是手动创建。
DI:当一个bean实例引用到另一个bean实例时,spring容器帮助我们创建依赖bean实例并注入到另一个bean中。注入方式主要有Setter注入和构造函数注入,循环注入一般不用。
Spring容器装配bean(XML配置方式和注解配置方式)
XML配置:bean的顶级标签,需要引入核心命名空间,bean子标签用来声明那些需要ioc容器帮助我们创建的类。通过ClassPathXmlApplicationContext来加载配置文件,从而获取实例bean。
注解配置:@Configuration注解标明BeanConfiguration类,等价于<beans>标签,在该类中,每个使用注解@Bean的公共方式对应着一个<bean>标签的定义,等价于<bean>标签。使用AnnotationCongfigApplicationContext来加载配置文件(XXX.class)。
自动装备与注解注入
Atutowine:byType,byName,constructor三种模式
@Autowired@Resource@Value:使用注解时必须启动注解驱动<context:annotation-config />,
@Autowired默认按照类型匹配,可以和@Qualifer配合使用名称进行匹配。
@Resource默认按照byName模式,无法标注在构造函数
@Value适合简单值类型,一般会与properties配合使用
IOC容器管理bean
Bean的命名:在同一个配置文件中,id必须是唯一的,name可以有多个,但不能与id重复。
Bean对象多了以后,可以收用@Service和@Repository,@Service用于对Service实现类进行标注,@Respository用于对DAO实现类进行标注
Bean实例化
一般是通过构造方法创建bean,又是可以用静态方法构造和实例工厂构造
Bean重写机制
当不同xml文件中出现同名id属性的bean时读取的优先级问题,会优先加载子文件的bean。可以使用分层模式。
Bean作用域
Singleton作用域:每个bean只会被创建一次,而且spring容器在整个应用程序生存期都可以使用该实例。Spring创建bean失利后,通过代码获取的bean,无论多少次,都是同一个bean实例
Prototype作用域:每次获取bean实例时都会新创建一个实例对象,类似于new操作符。
特殊情况:一个singleton依赖与一个prototype时,需要放弃依赖注入,使用手动注入。
一般情况下,对于有状态的bean应该使用prototype,无状态的使用singleton。
Request与session作用域
Request作用域:有http请求时创建一个request作用域的bean实例,新创建的互不干扰,请求结束销毁。
Session作用域:创建一个新的http session时,就会创建一个session作用域的bean,并且该实例bean伴随会话的存在而存在
Global Session作用域
类似于session作用域,相当于全局变量,类似于servlet的application,适用于protlet的wenb应用程序。
Bean的延长加载
真正需要bean时候才创建
<context:component-scan />扫面对应包下的bean对象并创建实例
<context:annotation-config />注解驱动注册
明天计划的事情:继续整理笔记
遇到的问题:
收获:温习了一下,感觉还是多敲代码记得牢。又过了一遍知识点,明天着重解决卡壳知识。
评论