Spring要点

2021-06-06 21:05

阅读:546

标签:模块   开发框架   框架   邮件   inf   red   aspect   spec   sql   

关于Spring

1.Spring是一种轻量级(依赖小,需要就打入就行)开发框架,是很多模块的集合。分别核心容器,数据访问/集成,Web,AOP,工具,消息,和测试。

spring官网的6大特征:1.核心技术:依赖注入DI,AOP(面向切面编程)事件,资源,数据绑定等等。

                        2.测试:模拟对象,SpringMVC测试

           3.数据访问:JDBC,DAO,ORM

           4.web支持:SpringMVC,spring WebFlux Web框架

           5.集成:远程处理,jms,电子邮件,调度,缓存等等

           6.语言:Kotlin,Groovy,动态语言

 

2.一些重要的Spring模块

Spring Core: 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IOC 依赖注入功能。
Spring Aspects  : 该模块为与AspectJ的集成提供支持。
Spring AOP :提供了面向方面的编程实现。
Spring JDBC : Java数据库连接。
Spring JMS :Java消息服务。
Spring ORM : 用于支持Hibernate等ORM工具。
Spring Web : 为创建Web应用程序提供支持。
Spring Test : 提供了对 JUnit 和 TestNG 测试的支持。

3.IOC

Ioc其实是一种设计思想,不仅仅在spring中有使用,将在程序中手动创建对象的动作交给spring去做,Ioc容器是spring实习的ioc,这里的Ioc容器其实是一个map(k,v)map里存放的是不同的bean

ioc就像是一个工厂,当我们需要创建一个对象时,就去配置文件配置就好了,后面springboot也可以通过注解的方式实现。

IOC的初始化过程

xml--(读取)>resource--(解析)>beanDefition--(注册)>beanFactory

4.Aop

面向切面编程,能将那些与业务无关,却为业务模块所需要的逻辑与责任封装起来,减少模块之间耦合度,减少系统的重复代码

如果被代理对象实现了接口,Aop就会用JDK proxy,否则使用Cglib

5.bean的作用域与Spring单实例和多实例

1.singleton,唯一单实例,spring默认单实例,在bean标签内使用 scope=“singeton”

2.prototype 多例模式,每次调用都产生新的对象

3.request 在http每次请求都产生一个新bean,作用域以及生命周期都在这个request内

4.session 在http每次请求下都产生一个新的bean,作用域都在这个session内有效

5.globesession 全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。

6.bean(controller)的线程安全问题

1.设置scope为多例模式 prototype

2.将变量放在threadlocal下

3.尽量不定义变量

7.bean的生命周期

Bean 容器找到配置文件中 Spring Bean 的定义。
Bean 容器利用 Java Reflection API 创建一个Bean的实例。
如果涉及到一些属性值 利用 set()方法设置一些属性值。
如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入Bean的名字。
如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader对象的实例。
如果Bean实现了 BeanFactoryAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoade r对象的实例。
与上面的类似,如果实现了其他 *.Aware接口,就调用相应的方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessBeforeInitialization() 方法
如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。
如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessAfterInitialization() 方法
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。

技术图片

 

 

 实例化对象>设置属性>检查aware相关接口并且设置相关依赖>beanPostProcessor前置处理>检查是否是initializingBean决定是否调用afterPropertiesSet方法>检查是否有自定义的init方法>BeanPostProcessor后置方法>注册必要的Destruction相关回调接口>使用>是否实现disposableBean接口>是否自定义销毁方法

8.spring事务的隔离级别

1.TransactionDefinition.ISOLATION-DEFAULT默认   mysql默认的是REPEATABLE-READ  ORACLE默认的是READ-COMMIT级别

2.TransactionDefinition.ISOLATION-READ-COMMIT   级别最低  允许未提交的数据变更 可能导致脏读 不可重复读 幻读

3.TransactionDefinition.ISOLATION-READ-UNCOMMIT允许读取提交的数据 可能导致 可以阻止脏读 但不可阻止幻读 不可重复读

4.TransactionDefinition.ISOLATION-REPEATABLE_READ 对同一字段的修改都是一致的 除非事务自己的修改 可以阻止脏读 不可重复读 可能会有幻读

5.TransactionDefinition.ISOLATION-SERIALIZABLE 最高级别 都可以 但是影响性能。

9.事务的传播方式

与当前事务有关

1.TransactionDefination.PROPAGATION-REQUIRED 如果当前有事务就加入事务,如果不存在就创建一个新的事务执行

2.TransactionDefination.PROPAGATION-SUPPORTS 如果当前有事务就加入事务。如果不存在事务就以非事务的方式进行

3.TransactionDefination.PROPAGATION-MANDATORY 如果当前有事务就加入事务 如果不存在就异常

与当前事务无关

1.TransactionDefination.PROPAGATION.REQUIRED_NEW 创建一个新事务来进行,如果有当前事务就挂起

2.TransactionDefination.PROPAGATION.REQUIRED_NOT_SUPPORT 以非事务的方式进行,如果有当前事务就挂起

3.TransactionDefination.PROPAGATION.NEVER 以非事务方式进行 有当前事务就爆出异常

 

希望每个努力的人 都有回报

Spring要点

标签:模块   开发框架   框架   邮件   inf   red   aspect   spec   sql   

原文地址:https://www.cnblogs.com/yu0601/p/14589768.html


评论


亲,登录后才可以留言!