Spring

Spring

在这里插入图片描述

观察者模式 :在spring容器中,有一系列的监听器,用来完成:在不同的阶段做不同的处理工作;
Spring 的整体架构图:

IOC 和 AOC联系

IOC底层实现的机制是通过反射的方式来实现;
AOC底层实现是通过动态代理;
IOC 控制反转,里面有一个容器;放我们的对象Bean;
这个Bean是放在Map里面的;这个Bean 就是通过反射来创建的;

我们可以模拟@Autowired这个注解

public class UserController {
	private UserService userService;
}

我们可以通过反射实现反射赋值,将这个UserService赋值到UserController中; 就是替代@Autowired这个注解;

// 1.先创建UserController 对象
// 2.创建UserService
// 3.完成注入的功能
// 4.通过class 对象获取UserService 属性
// 5.由于是private修饰的 设置访问属性为true
// 6.获取set方法来注入属性值
// 7.执行方法
在psvm中执行如下方法,就可以实现对创建好的UserService对象注入到UserController中;
在这里插入图片描述
下面是使用注解来进行注入:
1.先写一个注解
在这里插入图片描述
2.把定义好的注解进行使用
// 1.创建UserController
// 2.获取Class对象
// 3.遍历所有的属性,来判断一下是不是使用@Autowired来修饰
// 4.如果是不为null ,获取当前属性的类型,通过类型来创建具体的类型】
在这里插入图片描述

// 5.把创建出来的对象设置到UserController中
在这里插入图片描述
这些自动注入就是通过反射来进行实现的;这些就是Spring来帮我们实现的;

IOC

Spring就是帮我们解决了不需要自己创建对象,只需要用到的时候去容器拿即可;Spring会帮我们创建出来;
在这里插入图片描述
最开始的时候是通过new来创建对象,后来是通过工厂模式来创建,但是还是麻烦,最后是使用IOC容器来进行实现;
但是,我们需要先给出一个对象的定义,然后,把这些交给IOC容器,让它帮我们创建,等需要使用的时候,就向IOC来拿;对于对象的定义有XML、注解等一些其他方式;
在这里插入图片描述
这些定义信息,由于,不同的方式处理是不同的,所以,所有的实现都要经过BeanDefinitionReader读取出bean信息(BeanDefinition);
// 2. 读取出来Bean信息以后,就需要进行实例化;这里的实例化,也是用反射来进行实例化的;需要通过BeanFactory来进行实例化对象;
// 3.当实例化对象以后,就把对象存放在Map容器中;
这就是最基础的原理:
但是Spring是一个框架,它最重要的就是可扩展性
其中 xxxPostProcessor就是用来扩展的;(增强器)
例子:比如说:当我们定义了十个bean信息,然后,已经加载到了BeanDefinition 这时候我们需要对其属性进行修改,这个时候,就可以使用增强器来进行了 Spring定义了 1.BeanFactoryPostProcessor 2.BeanPostProcessor 这两个接口来做一些增强的功能;
1.BeanFactoryPostProcessor 是在bean到BeanFactory之间的过程执行 自动装配:就是他的实现类实现的;
2.BeanPostProcessor 是在bean 初始化之前和初始化之后进行执行;AOP:就是在BeanPostProcessor中子类实现的

bean的生命周期 Spring容器从配置文件中读取bean的定义,并实例化bean;
1.如果bean实现了XXXAware 接口 那么就会调用相应的方法
2.如果有任何和bean相关联的BeanPostProcessors 那么就会调用postProcessBeforeInitialization()方法
3.如果bean实现了IntializingBean了,调用它的afterPropertySet方法;
4.如果bean声明了初始化方法,调用此初始化方法
5.如果有beanPostProcessors 和bean关联,调用postProcessAfterInitialization()方法将被调用。
6.如果bean实现了DisposableBean,它将调用destory()方法

BeanFactory:接口文档中有进行描述;
BeanFactory 和 FactoryBean 的区别
BeanFactory:创建对象主要是它
FactoryBean :创建复杂bean 或者说是单个bean 不用工厂创建 实现getObject() 方法,直接new对象,进行返回即可;

Enviroment 接口:当前系统存在很多环境变量,所有的环境属性值都封装到Enviroment,当需要属性值时,就可以去拿到它;
在这里插入图片描述

Spring Boot

在之前的项目开发中,我们使用SSM框架,进行项目开发的时候需要进行整合,当需要第三方包的时候依赖需要添加额外的jar,还要根据很多额外的配置,使用SpringBoot之后简化了很多配置,当需要什么组件时,直接使用starter引入即可,不需要人为再进行整合;
Spring Boot是Spring的一个扩展:Spring Boot需要依托于Spring

Springboot启动流程
Springboot会先加载spring.factories中加载进来,然后,在进行排除掉没有的;
@Component 进行加载; 扫描注解Component以后,完成了启动对象的注入,然后,进行自动装配;
调用refresh()来注入;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值