Spring总结

为什么学习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中注解说明

  1. @Component 将当前的类,交给Spring容器管理, 对象的创建是由Spring通过反射机制自动创建对象.
  2. @ComponentScan(“com.jt”) 指定扫描的包路径, 可以扫描它的子孙包,用在配置类中
  3. @Configuration 标识配置类
  4. @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模式

  1. JDK代理模式是java原生提供的API,无需导包
  2. JDK代理要求: 被代理者必须 要么是接口,要么实现接口
  3. 灵活: 代理对象应该看起来和被代理者 一模一样!!! (方法相同)

动态代理-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

注解缓存写法与映射文件写法冲突.所以一般二选一即可.

前后端项目搭建图(课堂)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值