Spring知识整理

这篇博客详细介绍了Spring的核心模块,包括Bean的生命周期、BeanFactory与FactoryBean的区别、IoC控制反转、AOP、注解、MVC、事务管理、设计模式等。深入探讨了Spring Bean的加载过程,解释了Spring Boot体系和Spring整合Mybatis的机制,同时提到了Mybatis的缓存机制。
摘要由CSDN通过智能技术生成

Spring模块

核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块
在这里插入图片描述

Spring Bean

  1. bean 的生命周期
    在这里插入图片描述
    实例化一个bean , new

    set()设置属性

    IOC依赖注入:按照Spring上下文对实例化bean进行配置

    setBeanName实现:若Bean实现了BeanNameAware,会调用setBeanName(String id) ---- 配置文件中Bean的id

    setBeanFactory(BeanFactory):若实现了BeanFactoryAware

    setApplicationContext():若实现了ApplicationContextAware,传入Spring上下文

    若实现了其他 *.Aware接口,就调用相应的方法。

    如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessBeforeInitialization() 方法

    若Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。

    init-method:若配置此属性,会自动调用其配置的初始化方法

    postProcessAfterInitialization:

    destory过期自动清理阶段:若实现了DisposableBean,会调用destory()

    destory-method:若配置此属性,会自动调用配置的销毁方法

  2. bean 加载过程
    (1)转换对应的beanName
    final String beanName = transformedBeanName(name);
    去除FactoryBean的修饰符 name="&aa" ----> name=“aa”
    取指定alias所表示的最终beanName A指向B,B指向C---->返回C

    (2)尝试从缓存中加载单例
    获取不到再从earlySingletonObjects里面获取
    然后再次尝试从singletonFactory中加载
    Object sharedInstance = getSingleton(beanName)

    (3)bean的实例化
    从bean的实例中获取对象:getObjectForBeanInstance()
    –getObjectFromFactoryBean() — doGetObjectFromFactoryBean() — object=factory.getObject()

    尽可能保证所有bean初始化后都会调用注册的beanPostProcessor.postProcessAfterInitialization方法进行处理

    获取单例:
    检查缓存是否已经加载过 :Object singletonObject = this.singletonObjects.get(beanName)
    若没有加载,则记录beanName的正在加载状态
    加载单例前记录加载状态—将当前正要创建的bean记录在缓存中,便可以对循环依赖进行检测:beforeSingletonCreation(beanName)
    通过调用参数传入的ObjectFactory的个体Object方法实例化bean:singletonObject = singletonFactory.getObject()
    加载单例后的处理方法调用—bean加载结束后移除缓存中bean的记录状态:afterSingletonCreation(beanName)
    将结果记录至缓存,并删除加载bean过程中所记录的各种辅助状态:addSingleton(beanName,singletonObject)
    返回处理结果

    (4)原型模式的依赖检查
    只有在单例情况才尝试解决循环依赖(A中有B的属性,B中有A的属性)
    原型模式下直接返回异常

    (5)检测parentBeanFactory
    BeanFactory parentBeanFactory = getParentBeanFactory()
    parentBeanFactory!=null && !containsBeanDefinition(beanName)
    检测如果当前加载的XML配置文件中不包含beanName所对应的配置,只能到parentBeanFactory去尝试

    (6)将存储xml配置文件的GernericBeanDefinition 转换为RootBeanDefinition
    如果指定beanname是子bean的话同时合并父类的相关属性
    final RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName)

    (7)寻找依赖
    若存在依赖则需要递归实例化依赖的bean
    mbd.getDependsOn()

    (8)针对不同的模式进行bean的创建
    实例化mbd
    bean = getObjectForBeanInstance(instance,name,beanName,mbd);

    (9)类型转换
    检测需要的类型是否符合bean的实际类型

BeanFactory 和 FactoryBean的区别

  1. BeanFactory
    工厂类,生产和管理bean的工厂。
    是IOC容器的核心接口,实例化、定位、配置对象、建立对象间依赖
    实现类:
    DefaultListableBeanFactory
    XmlBeanFactory(以XML方式描述组成应用对象及对象间的依赖关系)
    ApplicationContext:扩展,更面向框架的方式工作以及对上下文进行分层和实现继承,还包括:
    • MessageSource, 提供国际化的消息访问
    • 资源访问,如URL和文件
    • 事件传播
    • 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层;

    getBean():获取实例

  2. FactoryBean
    一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在中提供大量的配置信息。

    用户可以通过实现该接口定制实例化Bean的逻辑

    getObject()返回的对象

Spring IoC 控制反转

一种设计思想,将原本在程序中手动创建对象的控制权,交由Spring框架来管理。实现载体IoC容器,map结构,存放各种对象。
IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。
在这里插入图片描述
DI:依赖注入,IoC最合理的实现方式

Spring AOP

面向切面编程,事务、日志、控制权限等,将一些业务逻辑封装起来。
基于动态代理
JDK Proxy(代理对象实现了某个接口)
Cglib (生成代理对象的子类作为代理)

Spring注解

  1. @SpringBootApplication
    @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。

    @Controller (返回一个页面) +@ResponseBody= @RestController (返回JSON 或 XML 形式数据)

  2. 将类声明为bean的注解:
    @Bean 作用于方法
    @Autowired自动装配bean
    @Componect @Repository、@Service、@Controller

    @Scope 声明作用域

  3. 处理 http 请求:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Spring是一个广泛使用的轻量级开源框架,用于构建企业级Web应用程序。Spring框架提供了模块化的解决方案,简化了企业级应用的开发、管理以及依赖注入(Dependency Injection,DI)等功能。以下是一些Spring基础知识点的整理: 1. **IoC(Inversion of Control)和DI(Dependency Injection)**:Spring的核心思想就是IoC,它反转了传统的控制流动,使对象之间通过容器管理彼此的依赖关系,而不是硬编码。DI是IoC的一种具体实现方式,通过配置文件或注解自动为对象提供所需依赖。 2. **Bean的作用域和生命周期**:Spring中的Bean有多种作用域,如Singleton(单例)、Prototype(原型)、Request、Session等。每个Bean都有其生命周期,从创建、初始化到使用和销毁。 3. **Spring配置文件**:通常使用XML配置文件(如applicationContext.xml)或Java配置(@Configuration classes)来定义Spring应用的组件和依赖关系。 4. **AOP(Aspect Oriented Programming)**:Spring AOP支持面向切面编程,可以编写跨组件的行为,比如日志记录、事务管理等。 5. **Spring MVC**:Spring提供的web MVC架构,包括Controller处理HTTP请求,Model负责数据访问和业务逻辑,View负责渲染结果给用户。 6. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建,自动配置了许多常用的功能,使得快速开发变得更容易。 7. **Spring Data**:提供了一套高级API,用于简化数据访问操作,如JPA、MongoDB等。 8. **Spring Security**:用于实现Web应用的安全管理,包括认证、授权、会话管理等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值