Spring笔记(一)

Spring笔记(一)

什么是Spring?

Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的平台。它能帮助开发者解决基础性的问题,使得开发人员能更专注于程序的开发,大大提高了效率。

Spring集成了20多个模块,体系结构如下图所示:
在这里插入图片描述

spring又被称为容器或者大管家,其主要核心有:

  1. 控制反转(IOC–Inversion of Control)
  2. 依赖注入(DI–Dependency Injection)
  3. 面向切面编程(AOP–Aspect Oriented Programming)

1.IOC

Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化
Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供
了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。
在这里插入图片描述
其优点有以下一些:

  • 对象之间的解耦,不必自己实例化,如需更改对象,只需更改配置文件里的信息
  • 提高程序拓展性,若后期需要添加新的类,可以在原先的类上继承下来,原先代码不需要改动
  • 支持加载服务时的饿汉式初始化和懒加载,每个对象只实例化一次

缺点:

  • 对象的创建过程变得复杂
  • 底层使用解析xml+反射完成,对程序性能有一点影响

IOC源码分析:核心是BeanFactory、BeanDefinition 、BeanPostProcessor 、xml解析(XmlBeanDefinitionReader )+反射

参考:

再来看看spring的Bean的作用域:

在这里插入图片描述

2.DI

spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属
性自动设置所需要的值的过程,就是依赖注入的思想

在spring中,给对象的属性赋值的几种方式:

  1. 通过构造方法
  2. 通过set方法
  3. 静态工厂注入
  4. 实例工厂注入
  5. 注解(属性注入,最常用)

五种自动装配的方式:

  1. no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。
  2. byName:通过参数名自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
  3. byType::通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byType,
    之后容器试图匹配、装配和该 bean 的属性具有相同类型的 bean。如果有多个 bean 符合条件,则抛出错误。
  4. constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类
    型,将会抛出异常。
  5. autodetect:首先尝试使用 constructor 来自动装配,如果无法工作,则使用 byType 方式。

3.AOP

面向切面的编程, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理

AOP的实现原理:动态代理

  • JDK动态代理:基于接口
  • CGLIB动态代理:基于继承

详情可参考我的另外一篇博客:动态代理的两种实现方式,或者一个大牛写的这篇:Spring AOP实现原理

AOP的几个名词的概念:

  1. 切面(Aspect) :官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”。
  2. 连接点(Joinpoint) :程序执行过程中的某一行为。
  3. 通知(Advice) :“切面”对于某个“连接点”所产生的动作。共有五种通知类型
    • before:前置通知,在一个方法执行前被调用。
    • after: 在方法执行之后调用的通知,无论方法执行是否成功。
    • after-returning: 仅当方法成功完成后执行的通知。
    • after-throwing: 在方法抛出异常退出时执行的通知。
    • around: 在方法执行之前和之后调用的通知。
  4. 切入点(Pointcut) :匹配连接点的断言,在AOP中通知和一个切入点表达式关联。
  5. 目标对象(Target Object) :被一个或者多个切面所通知的对象。

AOP的源码分析推荐这篇博客:

4.小结

Spring的核心就是IOC和AOP,搞懂了这几个,Spring就算基本掌握了,最后推荐一点干货

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值