发表于: 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方法时将statementid硬编码了

3.调用sqlSession传入的变量,由于sqlSession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序开发。

 

Mapper代理方法

只需要mapper接口,相当于dao接口,不需要接口实现类


知识点

1,编写XXXmapper.xml的映射文件

2,编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

 

 注意事项

1,mapper.xml文件中Namespace需要写入mapper接口的全限定名称

2,XXXmapper.java接口中的方法和mapper.xml中的statementId一致。

3,mapper.java接口中的方法输入参数和mapper.xmlstatementparameterType指定的类型一致。

4,mapper.java接口中的方法的返回值类型和mapper.xmlstatementresultType指定的类型一致。

 

使用时创建mapper对象,mybatis会自动生成mapper代理对象


 

 

Mybatis注解模式

全局配置是相同的,但不需要映射文件。

通过使用注解@Select@Insert@Update@Delete来操作数据库。

手动注册mapper代理,增删改之后提交事务

 

 

Spring笔记整理:

反射:根据完整类名来动态生成对象

IOC:使一个对象依赖其他对象时通过被动的方式传入进来,而不是手动创建。

DI:当一个bean实例引用到另一个bean实例时,spring容器帮助我们创建依赖bean实例并注入到另一个bean中。注入方式主要有Setter注入和构造函数注入,循环注入一般不用。

 

Spring容器装配beanXML配置方式和注解配置方式)

XML配置bean的顶级标签,需要引入核心命名空间,bean子标签用来声明那些需要ioc容器帮助我们创建的类。通过ClassPathXmlApplicationContext来加载配置文件,从而获取实例bean

注解配置:@Configuration注解标明BeanConfiguration类,等价于<beans>标签,在该类中,每个使用注解@Bean的公共方式对应着一个<bean>标签的定义,等价于<bean>标签。使用AnnotationCongfigApplicationContext来加载配置文件(XXX.class)。

 

自动装备与注解注入

AtutowinebyType,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

 

Requestsession作用域

Request作用域:有http请求时创建一个request作用域的bean实例,新创建的互不干扰,请求结束销毁。

Session作用域:创建一个新的http session时,就会创建一个session作用域的bean,并且该实例bean伴随会话的存在而存在

 

 

Global Session作用域

类似于session作用域,相当于全局变量,类似于servletapplication,适用于protletwenb应用程序。

 

Bean的延长加载

真正需要bean时候才创建


<context:component-scan />扫面对应包下的bean对象并创建实例

<context:annotation-config />注解驱动注册

 



明天计划的事情:继续整理笔记
遇到的问题: 
收获:温习了一下,感觉还是多敲代码记得牢。又过了一遍知识点,明天着重解决卡壳知识。


返回列表 返回列表
评论

    分享到