为什么学习spring框架
让程序设计实现松耦合.
是针对bean的生命周期进行管理的轻量级容器
Spring框架主要由七部分组成:
分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO
Spring Context、 Spring Web和 Spring Web MVC。
什么是面向接口编程
对象中的属性一般写接口. java中多态的体现.让属性类型更加灵活的实现松耦合.
什么是IOC
Ioc全称Inversion of Control,即“控制反转”,这是一种设计思想。
对象创建的权利由Spring框架完成.由容器管理对象的生命周期. 降低代码耦合性
Spring容器启动方式 1. xml方式 2.注解方式
万能语法: 根据当前spring的配置规则,实例化接口对象.
我一般不写这些代码,如果想看也可以通过ApplicationContext 查找指定的实现类.
关于spring中注解说明
- @Component 将当前的类,交给Spring容器管理, 对象的创建是由Spring通过反射机制自动创建对象.
- @ComponentScan(“com.jt”) 指定扫描的包路径, 可以扫描它的子孙包,用在配置类中
- @Configuration 标识配置类
- @Bean 将自己方法的返回值交给Spring容器管理
什么时候使用工厂模式:
1.对象不能直接实例化的时候.
2.spring框架整合其它第三方框架时使用. FactoryBean
单例多例问题:
通过@Scope注解,控制对象单例/多例
默认条件下是单例模式 @Scope(“singleton”)
多例模式 @Scope("prototype")
懒加载规则: 1. 默认条件下 懒加载无效 添加注解@Lazy 有效. 只对单例模式有效.
spring生命周期管理 4个过程:
1.对象创建 2. 对象初始化 @PostConstruct
3. 业务调用 4.对象销毁 @PreDestroy
Spring中依赖注入的注解@Autowired 1.默认按照类型注入
2.可以按照名称注入 @Qualifier(“cat”) @Resource java中的注解.
10.MVC 设计思想 View 视图层 Model业务层 Control 控制层
MVC设计思想: 层级代码结构 Controller/Service/Mapper|Dao
分层说明:
1. 控制层 Controller 与前端页面交互的. @Controller
2. 业务层 Service 编辑业务逻辑. @Service
3. 持久层 Mapper 实现数据库的相关操作
MVC > 三层代码结构
@Value spring为属性动态赋值 基本类型和String和集合(几乎不用)
动态代理 JDK动态代理/CGLib动态代理
动态代理-JDK模式
- JDK代理模式是java原生提供的API,无需导包
- JDK代理要求: 被代理者必须 要么是接口,要么实现接口
- 灵活: 代理对象应该看起来和被代理者 一模一样!!! (方法相同)
动态代理-CGLIB
CGLIB说明
jdk代理: 要求必须有/实现接口. 如果没有接口,则JDK代理不能正常执行.
cglib代理: 要求被代理者有无接口都可以. 代理对象是目标对象的子类 重写子类方法
AOP 面向切面编程
在不改变源码的条件下对方法进行扩展.
AOP常见注解
1. @Aspect 标识切面
2. @Pointcut 标识切入点表达式 4种写法 2种常用
3. 五个通知注解
4. @EnableAspectJAutoProxy(proxyTargetClass = true) //开启AOP
5. 排序注解 @Order
SpringMVC
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
Json串格式:
对象(object) 是一个无序的“‘名称/值’对”集合。
一个对象以“{”(左括号)开始,“}”(右括号)结束。
每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。`
例:
{"id": "100","name": "tomcat", "age": "18"}
嵌套格式:
值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)
例:
[100,true,["a","b",{"name":"张三","hobbys": ["吃饭","睡觉"]}]]
Ajox:
功能和作用: Ajax主要实现前后端交互.提高用户页面与服务器之间交互效率.
特点: 局部刷新,异步访问
什么是SpringBoot
SpringBoot框架是框架的框架,简化常规框架的配置的方式
springBoot将繁琐的配置封装到某些jar包中
只需要少量的配置就可以获取其功能的方式 叫做 “开箱即用”
启动项: spring-boot-starter-xxxx
说明: 包中已经将框架进行了整合.用户拿来就用
说明: @ComponentScan(“包路径!!!”)
规则: 当前包扫描的路径 默认就是主启动类所在的包路径…
注意事项: 以后写代码 必须在主启动类所在包路径的 同包及子包中编辑
注解名称: @EnableAutoConfiguration 启动自动化的配置
规则: 该注解的作用用来加载springBoot-start-xxx的启动项.当主启动类执行时,则会开始加载启动项中的配置.则功能加载成功.
特别:@PropertySource(value = "classpath:/msg.properties",encoding = "UTF-8") 设置中文注解
跨域解决:
1.jsonp 方式跨域 淘汰了.
2.CORS 跨域资源共享
注解为:@CrossOrigin //允许访问所有其他网址
+(value=“http://baidu.com”) 只允许跨越访问该网站
总结: CORS要求在服务器端标识哪个网址可以跨域
Mybatis介绍
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
Mybatis特点:
简单易学:
本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:
mybatis不会对应用程序或者数据库的现有设计强加任何影响。
sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
解除sql与程序代码的耦合:
通过提供DAO层,将业务逻辑和数据访问逻辑分离
使系统的设计更清晰,更易维护,更易单元测试。
sql和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的orm字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供xml标签,支持编写动态sql
开启驼峰规则映射
说明: 在业务中经常出现该现象. 字段 user_id 属性:userId 属性和字段有驼峰映射规则.但是采用resultType的方式进行映射.则不能正常赋值.
解决方案:
1.resultMap 繁琐.
2.开启驼峰映射规则
关于自动映射规则:
1.没有关联映射时: 如果属性和字段同名,则可以省略不写.
2.如果有关联映射: 则需要添加自动映射的开关autoMapping="true"
该注解只对当前对象有效 如果有多个对象,则需要添加多次
mybatis缓存说明:
mybatis中提供了2种缓存的机制
一级缓存: SqlSession级别 在同一个sqlSession内实现数据的共享 默认开启
二级缓存:
SqlSessionFactory级别
由同一个sqlSessionFactory,生产的SqlSession 数据共享,默认开启 + 配置
一级缓存测试
说明: SpringBoot在使用一二级缓存时,有特殊要求 需要额外注意.
现象: 如果采用springBoot的方式进行测试时发现,sql执行多次. 一级缓存无效.
* 原因: springBoot整合mybatis之后,使用Mapper.find查询时.springBoot默认会开启
* 多个sqlSession
* 解决方案: 添加事务注解 @Transactional //控制事务
* 知识讲解: springBoot中如果添加了事务注解,则默认采用同一个SqlSession
二级缓存测试
说明: 为了构建多个mapper对象.需要准备多个线程进行测试. 可以通过浏览器让用户发起多次请求.之后测试二级缓存是否有效.
层级代码结构:
1. Controller 层 SpringMVC 面向接口编程 2:2:1
2. Service 层 Spring
3. Mapper/Dao层 Mybatis
注解使用二级缓存
业务说明: Mybatis中采用注解方式的查询和xml映射文件的查询的方式不一样. 两者不可以混用.
使用注解的二级缓存: @CacheNamespace
注解缓存写法与映射文件写法冲突.所以一般二选一即可.