Spring Boot

SpringBoot

SpringBoot 是一种快速开发的轻量级框架、SpringCloud是一套微服务治理方案。

一、IOC(控制反转)

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象

1.Autowired和Resource

两者都是bean注入时使用的。但@Resource并不是Spring注解。它是Javax.annotation.Resource。Autowired注解是按照类型装配对象。如果想按照名称的话可以配合使用Qualifier来装配。
Resource则使用name来注入。

2.依赖注入的方式有几种

接口注入:被注入对象如果想要IOC容器为其注入依赖对象,就必须实现某个接口,这个接口提供一个方法,用来为被注入对象注入依赖对象,IOC容器通过接口方法将依赖对象注入到被注入对象中去。

interface UserInject{
        void injectUser(User user);//这里必须 是被注入对象依赖的对象
    }
    class Person implements UserInject{
        private User user;
 
        public Person(){}
 
        @Override
        public void injectUser(User user){
            this.user = user;//实现注入方法,外部通过此方法给此对象注入User对象
        }
    }

setter注入:即当前对象只需要为其依赖对象所对应的属性添加setter方法,IOC容器通过此setter方法将相应的依赖对象设置到被注入对象的方式即setter方法注入。

构造器注入:即被注入对象可以通过在其构造方法中声明依赖对象的参数列表,让外部(通常是IOC容器)知道它需要哪些依赖对象,然后IOC容器会检查被注入对象的构造方法, 取得其所需要的依赖对象列表,进而为其注入相应对象。

3、SpringMVC的工作原理

1.用户发送请求到前端控制器(DispatcherServlet);
2.前端控制器(DispatcherServlet 收到请求调用HandleMapping)处理器映射器;
3.处理器映射器找到具体的处理器,生成处理器对象以及处理器拦截器返回给前端控制器。
4.前端控制器根据HandleAdapter处理器适配器找到具体的处理器(controller,后端控制器)
5.controller执行完成返回ModelandView
6.前端处理器将ModelandView传给ViewReslover解析后返回具体的view。
7.最后DispatcherServlet将渲染后的视图响应用户。

4、AOP (面向切面编程)

将哪些与业务无关,却为业务模块共同调用的逻辑(日志处理、权限控制、事务处理)等封装起来,减少系统的重复代码以及模块之间的耦合度。

5、Spring bean的加载过程

在这里插入图片描述
(1)实例化Bean: 对于BeanFactory容器来说,当客户端请求一个尚未初始化或者初始化bean时需要注入一个尚未初始化的依赖时,容器就会调用createBean进行实例化。对于ApplicationContext容器来说,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。
(2)设置对象属性(依赖注入):实例化后的对象被封装在BeanWapper对象中。紧接着Spring根据BeanDefinition信息以及通过BeanWapper提供的设置属性的接口完成依赖注入

(3)处理Aware接口Spring会检测对象是否实现了xxxAware接口,并将相关的xxxAware实例注入bean。例如:如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId),此处传递的是spring配置文件中的Beanid。

如果这个Bean实现了BeanFactoryAware接口,会调用它的setBeanFactory(BeanFactory)方法传入的是spring工厂自身。

如果这个Bean实现了ApplicationContextAware接口会调用setApplicationContext(ApplicationContext),方法传入Spring上下文。
(4)调用BeanPostProcessor:如果想对Bean进行一些自定义的处理,那么可以让Bean实现BeanPostProcessor接口。
(5)IntializingBean与init-method:如果实现了IntializingBean接口,那么调用afterPropertiesSet()方法。如果配置了init-method属性那么调用其配置的初始化方法。
(6)初始化后:如果Bean实现了BeanPostProcessor()方法。将会调用postProcessAfterInitialization方法。
(7)当Bean不再需要时,需要进行清理;如果Bean实现了DisposiableBean接口那么会调用其实现destory方法。
(8)当spring配置文件中配置了destory-method方法时,会调用其配置的方法进行销毁。

6、Spring是如何解决循环依赖的

spring中使用三级缓存解决循环依赖问题。
首先循环依赖指的是A、B两个Bean相互引用。
A对象创建的生命周期如下:
1.创建一个A的普通对象—><beanName,A对象>
2.填充b属性—>去单例池中查找b对象—>创建B的bean对象。
3.填充其他属性
4.初始化后(AOP)存放到单例池中的是A的代理对象
5.放入单例池

B对象创建的生命周期如下:
1.创建一个B的普通对象
2.填充a属性—>去单例池中查找a对象—>创建A的bean对象。
3.填充其他属性
4.初始化后(AOP)
5.放入单例池

要想打破这个循环,我们可以引入一个缓存。
(1)单例池 singletonObjects 一级缓存 存储最终的对象
(2)earlySingletonObjects 二级缓存 存储的是AOP生成的代理对象
(3)三级缓存 用于判断循环依赖

那么为什么是三级缓存?三级缓存是要解决对象需要动态代理情况下的循环依赖。
Spring设计中AOP设计是在Bean加载过程的第五步的时候进行的。当Bean出现了循环依赖的情况下AOP才提前判断。所以此时再增加一个缓存,用于判断是否出现循环依赖。

7、SpringBoot 的自动装配

Spring Boot项目的启动注解是:@SpringBootApplication 它底部是由@SpringConfiguration、@CompnentScan、@EnableAutoConfiguration;其中@EnableAutoConfiguration 是实现自动装配的入口。该注解通过@Import注解导入了AutoConfigurationImportSelector,在该类中加载了Spring.factories的配置信息。然后筛选出以EnableAutoConfiguration为key 的数据。
加载到IOC容器中实现自动装配功能
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值