Spring学习

spring是一个轻量级的IOC和AOP容器框架。

IOC:控制反转,以前对象由自己创建和管理,现在交给spring容器管理,负责对象的生命周期和对象间的依赖关系。

工作原理:工厂模式和反射机制,通过读取XML或者配置类获取需要创建实现的Bean,并通过反射将其创建。

BeanFactory:负责读取bean配置文件,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期。容器延迟加载,在使用Bean时才实例化。

ApplicationContext:继承BeanFactory,容器即时加载所有Bean。

1.容器启动阶段:BeanDenifinionReader读取和解析配置文件,生成BeanDefinition对象,保存到BeanDefinitionRegistry中,BeanFactoryPostProcess增强BeanDefinition

2.Bean实例化阶段:将BeanDenifition转化成BeanWrapper,属性注入,初始化Bean,注册DisposableBean,使用完bean后,通过回调的方式调用DisposableBean的destory方法或者设置destory-method方法进行销毁Bean

2.1初始化Bean:处理Aware接口——执行BeanPostProcess的前置方法——调用InitializingBean的afterPropertiesSet或者设置init-method方法——执行BeanPostProcess的后置方法

2.1.1Aware接口

如果Bean实现BeanNameAware接口,调用setBeanName方法

如果Bean实现BeanClassLoaderAware接口,调用setBeanClassLoader方法

如果Bean实现BeanFatoryAware接口,调用setBeanFactory方法

如果Bean实现ApplicationContextAware接口,调用setApplicationContext方法

spring的bean加载流程:Spring的Bean加载流程_张维鹏的博客-CSDN博客_spring bean加载过程

Spring中用到的设计模式

1.模板模式:指定义一个算法的骨架,并允许子类为一个或多个步骤提供实现。模板模式使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为型设计模式。该模式包含一个抽象类和多个子类,抽象类定义多个抽象方法,这些方法都被顺序引用在final方法中。Spring中操作数据库以Template为结尾的类使用了该模式,如JdbcTemplate的doInConnection。

2.单例模式:指一个类只有一个实例,且该类能自行创建这个实例的一种模式,属于创建型模式。Spring中DefaultSingletonBeanRegistry.getSingleton使用该模式

3.工厂模式:指将创建对象的过程交给工厂进行处理,通过工厂提供给我们需要创建的对象,而不用自己直接去进行对象的创建,属于创建型模式。Spring中BeanFactory.getBean和FactoryBean.getObject上使用该模式。

4.代理模式:参考一文搞懂代理模式_deer-li的博客-CSDN博客_代理模式,属于结构型模式。Spring中JdkDynamicAopProxy实现了InvocationHandler接口。

5.观察者模式:Spring中的事件使用该模式。

6.策略模式:Spring对资源访问使用该模式。

7.装饰者模式:Spring对DataSource切换不同数据源使用该模式。

8.适配器模式:Spring使用HandlerAdapter调用不同的Handler使用该模式。

Spring解决循环依赖

先实例化A,放入三级缓存,然后属性注入B,会去走B的实例化流程,中间遇到A时从缓存中取,最后再初始化A。

SpringMvc的工作流程

用户将请求转发到DispatchSevlet——HandlerMapping——HandlerAdpate——Handler——Controller——ModelAndView——ViewResolver解析——view——渲染。

Spring事务传播机制

1.request:如果有事务,用当前事务执行,如果没有事务,起一个事务。

2.request_new:如果没有事务,起一个事务,如果有事务,将当前事务挂起,另起一个事务。

3.support:如果有事务,用当前事务执行,如果没有事务,就没事务执行。

4.not_support:如果有事务,将当前事务挂起,以非事务执行,如果没有事务,就没事务执行。

5.never:如果有事务,抛异常,如果没有事务,就没事务执行。

6.mandatory:如果有事务,用当前事务执行,如果没有事务,抛异常。

7.nested:如果有事务,外面事务回滚,里面也会回滚,如果没有事务,起一个事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了一种轻量级的、非侵入式的开发方式,通过依赖注入和面向切面编程等特性,简化了Java应用程序的开发过程。 以下是关于Spring学习的一些笔记: 1. IoC(控制反转):Spring通过IoC容器管理对象的创建和依赖关系的注入。通过配置文件或注解,将对象的创建和依赖关系的维护交给Spring容器来管理,降低了组件之间的耦合度。 2. DI(依赖注入):Spring通过依赖注入将对象之间的依赖关系解耦。通过构造函数、Setter方法或注解,将依赖的对象注入到目标对象中,使得对象之间的关系更加灵活和可维护。 3. AOP(面向切面编程):Spring提供了AOP的支持,可以将与业务逻辑无关的横切关注点(如日志、事务管理等)从业务逻辑中分离出来,提高了代码的可重用性和可维护性。 4. MVC(模型-视图-控制器):Spring提供了一个MVC框架,用于构建Web应用程序。通过DispatcherServlet、Controller、ViewResolver等组件,实现了请求的分发和处理,将业务逻辑和视图展示进行了分离。 5. JDBC和ORM支持:Spring提供了对JDBC和ORM框架(如Hibernate、MyBatis)的集成支持,简化了数据库访问的操作,提高了开发效率。 6. 事务管理:Spring提供了对事务的支持,通过声明式事务管理和编程式事务管理,实现了对数据库事务的控制和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值