Spring核心详解!!!

Spring出现的原因?

Spring出现的原因 解除耦合
软件开发的开闭原则:通过多态实现,要么子类重写父类,要么增加方法
提高抽象层次;
提高抽象层次的方法
把子类对象赋给父类对象进行使用的动态多态
注入Injection:某一个类想要什属性,通过set方法给他 就叫注入
依赖注入 Depenency Injection =DI 有set就能活 没有就错误
配置文件(反射)

Spring如何解除耦合

解耦合:首先解除逻辑耦合
mvc模式第一次解除了逻辑耦合

spring的IOC是进行深度解耦
日志:用来保持程序的健壮性,就是程序的运行记录

代理需要在jdk1.5以上版本使用
jdk代理是基于反射的没有反射就没有办法通用
调用代理类的的任何方法,都会执行到invoke方法
代理是模式
代理机制其实真正的代理的是方法
代理:proxy
代理的本质就是原产品不动,不做任何改变
要增值
要包装
代理分类:
一.静态代理:门面模式或装饰模式
缺点:需要为每一个被代理的方法都写一个代理方法,修改的时候特别值复杂,不灵活
二.动态代理
1.jdk动态代理:缺点:要想代理对象,被代理对象必须有接口,否侧不能代理
2.CGLIB代理:优点:在被代理类没有接口的情况下也能够被代理,实际就是为当前类生成一个子类
代理类和被代理类都需要实现同一个接口,代理类中包含一个被代理类的对象,可以提供两种方式把被代理对象赋给代理对象
调用被代理类,实现真正的逻辑,在自己的里面实现额外逻辑.

代理最终的要求就是简单通用灵活

Spring核心(重点来了!!!!)

Spring是一个无侵入式的轻量级开源框架
Spring两大特性 :
1.IOC:控制反转
IOC作用:解除类与类之间的关系耦合
解除耦合的方式用了四个技术点:

  1. 配置

  2. 容器

  3. 反射

  4. 注入(DI):利用set方法或者构造器给属性赋值

2.AOP:面相切面编程
作用:为了解除业务逻辑耦合,例如耦合或者数据业务逻辑日志业务
AOP实现原理是基于代理的
Spring进行内部实现的时候 ,会检测是否存在接口,存在时选择jdk动态代理,不存在选择CGLIB代理

Spring类似一个管家,后期几乎所有内容都交给Spring管理,View层Spring不管理,与java相关的全部管理.(Spring容器)

Spring的核心思想是解除程序中的耦合(解除了业务逻辑耦合,解除了类与类之间的关系耦合)
轻量级与重量级的区分:
1.性能开销
2.框架本身的大小问题
3.使用的难易程度

Spring中所有的行为都是基于Spring能够管理所有的类

Spring也有持久层框架,但是因为性能不强,所以没有人用,用来给hibernate和mybitas支持
Spring对web框架也是有支持的
Spring还是一个mvc结构的框架
Core解除的是类级别的耦合
AOP解除的是方法级别的耦合

IOC控制反转 Inversion Of Control
高层模块不应该依赖底层模块(如Action依赖Dao层)
实现必须依赖抽象,而不是是抽象依赖实现
依赖注入:Dependency Injection
DI是IOC的核心实现原理
通俗的说就是利用set方法或者构造器给属性赋值

搭建Spring环境:
1.加入jar包
2.写配置文件:applicationContext.xml 必须放在Src下 可以更改名字一般叫Spring.xml
一个Spring可以对应多个XMl文件,配置文件的划分是根据业务逻辑划分的

跟标签里写东西是Schema

Spring的核心是一个context容器
想要什么对象就在spring中配置这个对象
Spring会自动创建对象并且进行初始化

注入类型分为三类:
Type1 侵入式(依赖Spring)
Type2 (set/get) 和type3(构造器注入)是非侵入式

Spring中的接口是为了提高抽象层次,是变量接收的一个中介,所以Srping不需要管理接口
所谓的组件就是可以直接实例化,可以直接用的
构造器注入 里面的属性 ref=references引用 index要赋值属性的下标,从0开始
构造器注入唯一的优点就是时效性好,创建对象时直接赋值.
构造器注入作为了解 不需要掌握
构造器和set/get方法同时存在时取决于set/get方法

命名空间的引入和标签的引入差不多,不引用就不能用

当要注入的组件只有一个类型,注解后可以不配置,当有多个同一类型组件时,注解必须手动指定匹配的对象.
使用annotation注入就是为了0配置,resource自动配置属性,这是spring第一次使用0配置
0配置就是使用annotation的方式替代xml中配置的方式都叫0配置

使用Aop是最终使用annotation方式
Aspect Oriented Programming面向切面编程
切面就是系统服务逻辑

AOP的实现种类
1.实现Spring API的传统模式 侵入式实现已经淘汰(spring提倡无侵入式编程)
2.基于xml的设置
3.基于annotation配置

如上:
只要想写切点,必然要写 pointcut="execytion( * 包名+类名. * (…))"第一个 * 指任意返回值类型 第二个 * 表示所有方法 …表示任意参数
AOP基于代理的
最最最最常见的注解

事务是什么??

事物Transaction: 就是一件完整的事情:由一条或者多条sql语句组成,要么全部执行成功,要么全部执行失败.
例如(增删改,或者查询时加了for update 为了加上锁定事物,意思就是我操作完成后,别人才能操作当前对象)
事物的特点:1.最小单元—原子性(不可再分割)
例如:必须有两条sql语句才能完成一次删除部门的操作;
2.一致性
例如:数据改变之前的状态和改变之后的状态一致;
3.持久性
例如:数据修改完毕后应该是一个持久状态存在数据库中,而不是临时的;
4.隔离性(当一个事物占用某一个资源的时候,其余的事物只能进行等待,等待释放对于资源的占用)

Spring核心是什么相关推荐

  1. Spring核心——IOC处理器扩展

    为什么80%的码农都做不了架构师?>>>    非侵入式框架 Spring一直标注自己是一个非侵入式框架.非侵入式设计的概念并不新鲜,目标就是降低使用者和框架代码的耦合,毕竟框架的开 ...

  2. spring核心功能结构

    spring核心功能结构 Spring大约有20个模块,由1300多个不同的文件构成.这些模块可以分为: 核心容器.AOP和设备支持.数据访问与集成.Web组件.通信报文和集成测试等, 下面是 Spr ...

  3. 小马哥spring编程核心思想_Spring源码高级笔记之——Spring核心思想

    Spring核心思想 注意:IOC和AOP不是spring提出的,在spring之前就已经存在,只不过更偏向于理论化,spring在技术层次把这两个思想做了非常好的实现(Java) 第1节loC 1. ...

  4. 自己实现spring核心功能 一

    聊聊spring spring对于java开发者来说,是最熟悉不过的框架了,我们日常开发中每天都在使用它.它有着各种各样的好处,简单易用,得心应手... ... 我们一说到spring就会讲到ioc ...

  5. Spring核心之对 IOC的理解

    Spring核心之对 IOC的理解 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 一 .IOC IOC : Inversion of Control,中文译为" ...

  6. spring核心功能包中已经包含了cglib功能

    spring核心功能包中已经包含了cglib功能,所以不需要额外再引入cglib jar包 如下图所示: 也要思考一个问题,既然spring核心功能包里已经自带了cglib了,那么如果外部需要用到不同 ...

  7. spring核心配置文件引入外部properties文件和另外的xml配置文件

    spring核心配置文件引入外部properties文件和另外的xml配置文件 为什么要引入外部文件 我们使用jdbc的时候,会创建一个jdbc.properties配置文件,如果我需要在spring ...

  8. Spring核心注释

    介绍: org.springframework.beans.factory.annotation和org.springframework.context.annotation包中存在的Spring注释 ...

  9. java 切面_Java笔试面试精心整理得到89道Spring 核心知识【收藏向】

    点击上方"蓝字",关注了解更多 Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 ...

  10. Spring教程 - Spring核心框架教程

    Spring教程 - Spring核心框架教程 Spring是最广泛使用的Java EE框架之一.我已经在Spring Tutorial上写了很多内容,这是一篇摘要文章,它将作为索引按顺序完成所有这些 ...

最新文章

  1. nvm:Mac下的 node 版本管理工具
  2. python需要php吗-做网站用php还是python
  3. 【开发工具】学习记录 初学MATLAB
  4. 使用report PRC_SHOW_PRICING_DOCUMENT查看SAP CRM订单的pricing数据
  5. 怎么博客圆的文章越来越杂?
  6. Spring MVC:表单处理卷。 1个
  7. c语言微信备份文件,文件保存后自动刷新微信小程序
  8. 云原生应用架构转型不好做?阿里云这个平台让你一步到位!
  9. c语言非法字符空格,98行的四则计算器.(支持括号)加入了非法字符的检测
  10. GDB 命令详细解释
  11. 结对编程作业---电梯调度程序
  12. PHP中Foreach在引用时的陷阱
  13. 社区养老管理系统开发满足老年人多样化、多层次的需求
  14. Linux设置小红点键盘,让Ubuntu完美支持Thinkpad小红点Trackpoint
  15. 【微信小程序开发日记01】和风天气OUC之初步构想
  16. 完全卸载 OneDrive / 重装 OneDrive / 解决“已经安装了 OneDrive”
  17. Qt Creator 8.0.1 (Community)创建项目出现No valid kits found怎么办?
  18. 初识swipe.js
  19. selenium的webdrive驱动安装(谷歌浏览器)
  20. Oracle-07:别名,去重,子查询

热门文章

  1. 酒店ETL管理解决方案
  2. ARKit 和 ARCore概念介绍
  3. 数据库实验一实验报告
  4. 蓝牙车库门禁卡原理及实践
  5. linux shell经典脚本,10个经典Linux Shell脚本
  6. 2019.11.28工作记录——InstallShield制作windriver驱动安装包
  7. 弹性地基梁板法计算原理_基础专题
  8. c语言试题1答案,c语言试题1有答案
  9. 5G 智能融合城域网特点与组网方案
  10. 微型计算机控制系统的硬件组成