川流不息网

Spring学习分享

Spring学习分享

Spring学习分享

IOC

  1. IOC是学习一种编程思想:就是程序是去主动创建一个对象,程序员需要关注这个对象是分享怎么创建,怎么被赋值的学习。实现了依赖注入DI(IOC的分享实现方式),就是学习由Spring来创建这个对象,来管理这个对象。分享这样可以让程序员更专注与业务的学习代码。
  2. 而常见的分享构造方法有构造器注入和Setter注入。
  3. BeanFactor和ApplicationContext哪个才是学习IOC的容器呢,BeanFactor是分享ApplicationContext的子接口。ApplicationContext是学习Spring的上下文,提供了很多功能比如AOP等等。分享BeanFactory在用到某个bean的学习时候才会将这个bean放入,而ApplicaitonContext是分享一开始就加载好了所有的bean.
  4. SpringBean的生命周期:
    • 元信息配置阶段:通过xml、注解等形式,学习的信息
    • 元信息解析阶段:生成对应的beanDefinition对象
    • 元信息注册阶段:将beanDefinition对象保存到一个ConcurrentHashMap对象中去。
    • 实例化对象阶段:在此会生成一个Class对象,并且实例化。
    • 在实例化的时候会初始化。在初始化阶段 Spring 提供了初始化前后两个扩展点(BeanPostProcessor 的 postProcessBeforeInitialization、postProcessAfterInitialization 方法)
    • 在上下文关闭的时候,或者手动销毁对象
    • GC
  5. postProcessBeforeInitialization和postProcessAfterInitiallization两个方法:
  6. bean的作用阈:
    1. 单例,singleton
    2. 原型,prototype
    3. request:
    4. session:
    5. application
  7. Spring的事件原理
    1. 监听器
    2. 广播器
    3. 发布器
      如果有一个事件通过发布器发布,就会被广播,监听器监听到了,就会采取相对应的措施。比如容器就绪事件。

AOP

  1. Aop是什么:Aop是面向切面编程。在Aop中我们可以把一些公共的业务无关的代码抽象出来。比如链路日志、比如说一些监控打点。
  2. Aop的实现方式:动态代理
    1. JDK动态代理:如果实现了接口,就默认走JDK动态代理。
    2. Cglib动态代理:如果没有实现接口,就默认走Cglib动态代理。
  3. MDC + AOP实现全链路日志检索:业务背景就是在分布式环境下,如何做到全链路的日志检索,就可以用MDC来做。用AOP在切面扣,比如Controller层入口上打上标记,结合MDC实现。
  4. 事务是实现AOP最好的方法。通过生成事务生成对象的代理,但是代理对象本身不能自己调用自己的方法。

Spring与SpringBoot 重要注解

  1. @SpringBootApplication = @ComponentScan + @EnableAutoConfiguration + @SpringBootConfiguration。
    • ComponentScan:扫描对应包生成对应的bean
    • EnableAutoConfiguration:开启SpringBoot的自动配置。(同时也会注入一些组件)
    • SpringConfiguration:本质上是一个Configuration配置类。而Configuration类搭配@Bean将bean交由Spring管理。
  2. Spring的自动配置:Spring的自动配置主要靠xml中显示配置,开启注解之后可以使用:
    • @Autowire:byType注入
    • @Resource:byName注入
    • @Quliafy:搭配@Autowire使用,指定一个bean
  3. @RestController = @Controller + @ResponseBody
    • @ResponseBody:不走视图解析器了,直接把接受到的数据打印出来

Spring依赖注入如何解决

问题描述:Spring在启动的时候要初始化对象。而A依赖B的同时,B也依赖A。这就造成了循环依赖的问题。因为不知道先初始化哪一个对象比较好。
解决方法:懒加载,在Spring中,有被用到才加载被称为懒加载。

SpringBoot的启动流程

SpringBoot的启动流程
1.初始化SpinrgApplication对象。
2. 执行run方法。
- 执行run方法的时候主要执行这样几个动作
- 启动一个计时器,来记录springboot启动所花费的时间
- 初始化一个监听器,去监听run方法的执行
- 初始化Arugument和环境变量
- 打印Banner和版本
- 初始化上下文
- 监听器表明启动完成,计时器关闭
- 发布启动完成事件
- 调用ApplicationRunner和CommandLineRunner
- 最后发布就绪事件ApplicationReadyEvent,标志着SpringBoot可以处理就收的请求了(running())

Spring的事务机制

  1. 共有7中事务机制。我所知的就是,自动把内层事务与外层事务合并,这也是默认的。
  2. 隔离级别:读已提交、读未提交、不可重复度、串行化。

未经允许不得转载:川流不息网 » Spring学习分享