框架篇之spring

定义:

特点:

常用模块:

核心容器/spring上下文/spring-aop/spring-dao/spring-orm/spring-web模块/spring mvc 框架

常用注解:

@controller/@RestController/@Autowired/@ResquestMapping/@pathVariable/

@RequestParam/@ResponseBody/@RequestHeader

@ModelAttribute/@SessionAttribute/@Valid/@CookieValue

@service/@Repository/@Compent/@scope/@compentScan/@compent/@lazy-bean/@import

集成第三方:

Shiro == 权限

Redis == 缓存

Mybatis == 持久层

Quartz/spring-task ==定时任务

Oval/hibernate-validator == 校验

上下文:

ApplicationContext 由 BeanFactory 派 生 而 来 。

ApplicationContext 继承了 HierarchicalBeanFactory 和 ListableBeanFactory 接口。

包含:

名称

 

备注

AnnotationConfig

ApplicationContext(通用后缀)

从一个或多个基于Java的配置类中加载Spring应用上下文

AnnotationConfigWeb

从一个或多个基于Java的配置类中加载Spring Web应用上下文

ClassPathXml

从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源

FileSystemXml

从文件系统下的一个或多个XML配置文件中加载上下文定义

XmlWeb

 

从Web应用下的一个或多个XML配置文件中加载上下文定义

 

bean的作用域:

>>singleton(单例)|spring singleton的缺省是饿汉模式,如果需要设置成懒汉模式:default-lazy-init="true"/多线程下不安全。

创建时机:

在IOC容器初始化的时候该对象就会被创建

>>prototype(多例)|对这个bean的每次请求都会创建一个新的bean实例

>>request:一次请求范围,在请求完成后,bean会失效并被垃圾回收器回收/

>>session:会话范围,在session过期后、bean会自动失效/

>>global session:global-session和protlet应用相关

Bean的生命周期:

步骤序号

方法名/类名

动作

备注

1

BeanDefinitionReader

 

 

2

BeanDefinition

 

 

3

BeanFactoryPostProcessor

获取配置文件${}中的值

 

4

 

Spring对bean进行实例化(通过反射)

 

5

 

Spring将值和bean的引用注入到bean对应的属性中;(依赖注入)

 

6

 

处理Aware接口(如下是列举,更多可以查看源码)

见说明1

7

BeanPostProcessor

 

 

8

InitializingBean

 

 

9

DisposableBean

 

 

10

destroy

 

 

说明1

6.1>如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;

6.2>如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;

6.3>如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来;

Ioc(控制反转也叫依赖注入):

a:定义:

b:依赖注入的方式:Setter/接口/构造器

c:实现原理:工厂模式+反射机制

[

反射知识点:

https://blog.csdn.net/zjc_jia/article/details/111597865

]

d:代码层面上:注解@autowired

d.1:场景:

Controller:区分两个service;可以使用注解:Qualifier

e:Ioc容器

Beanfactroy:ioc最基本的容器,负责生产和管理bean,懒加载,不支持国际化/

Applicationcontext:即时加载,支持国际化

FactoryBean:接口,getbean获取bean对象

Aop:

Aop解决的问题:横向问题与业务主逻辑分开,实现解耦

Aop应用的业务场景:权限/日志/错误处理/缓存/[事务/内容传递/懒加载]

Aop实现者:spring aop/AspectJ/jboss aop

Aop注解:Aspect/Pointcut

Aop实现方式:

>如果代理类是接口,那么实现方式为java动态代理

>如果代理类不是接口,那么实现方式为cglib

[

代理模式相关知识点:

https://blog.csdn.net/zjc_jia/article/details/112094874

]

代理时机:对象初始化的时候

aop的通知方式:前置/后置/异常/最终/环绕/

相关术语:

通知(表示添加到切点的一段逻辑代码,并定位连接点的方位信息)/

连接点(能够被拦截的地方,每个成员方法都可以称之为连接点)/

切点(具体定位的连接点)/

切面(切面由切点和增强/通知组成)/

引入(引入/引介允许我们向现有的类添加新方法或属性。是一种特殊的增强)/

织入(将增强/通知添加到目标类的具体连接点上的过程)|编译期|类加载期|运行期/

Spring AOP 基于动态代理方式实现;AspectJ 基于静态代理方式实现

事务

事务(Transaction),一般是指要做的或所做的事情

事务的四个特性(ACID):原子性/隔离性/持久性/一致性/

核心接口:org.springframework.transaction

PlatformTransactionManager  事务管理器|提交事务/回滚事务

TransactionStatus 事务状态|是否是新的事务/是否有保存点/设置回滚/是否回滚/刷新/是否完成

TransactionDefinition 基本事务属性的定义|是否只读/传播行为[required/requires_new/supports/not_supported /never ]/隔离规则/回滚规则/事务超时//

隔离级别:

 

DEFAULT/使用后端数据库默认的隔离级别,

[

mysql默认隔离级别:Repeatable read:重复读[rr级别]

Oracle默认隔离级别:READ COMMITTED[rc级别]

PostgreSQL默认隔离级别:READ COMMITED[rc级别]

]

脏读/幻读/不可重复读

脏读:

一个事务读取到了另外一个事务没有提交的数据[解决方案:READ_COMMITTED]

幻读:-resultNum不一样

同一事务中,用同样的操作读取两次,得到的记录数不相同[解决方案:SERIALIZABLE_READ]

不可重复读:content不一样

在同一事务中,两次读取同一数据,得到内容不同[解决方案:REPEATABLE_READ]

传播机制:

REQUIRED :默认的 spring 事务传播级别,使用该级别的特点是,如果上下文中已经存在事务, 那么就加入到事务中执行,如果当前上下文中不存在事务, 则新建事务执行。

SUPPORTS : 该传播级别的特点是,如果上下文存在事务, 则支持事务加入事务, 如果没有事务, 则使用非事务的方式执行

MANDATORY :该级别的事务要求上下文中必须要存在事务, 否则就会抛出异常!

REQUIRES_NEW :每次都会新建一个事务, 并且同时将上下文中的事务挂起, 执行当前新建事务完成以后, 上下文事务恢复再执行

NOT_SUPPORTED :当前级别的特点就是上下文中存在事务, 则挂起事务, 执行当前逻辑, 结束后恢复上下文的事务

NEVER :传播级别要求上下文中不能存在事务, 一旦有事务, 就抛出 runtime 异常, 强制停止执行

NESTED:该传播级别特征是, 如果上下文中存在事务, 则嵌套事务执行, 如果不存在事务, 则新建事务

Autowired/resource的区别

  1. a=byType注入方式;r=byName注入方式
  2. a=spring提供的注解;r=javax

[

byName就是通过Bean的id或者name,byType就是按Bean的Class的类型

]

try...catch对Spring事务的影响

1.catch只打印异常,不抛出异常 - 影响

2.catch打印异常,并抛出异常(RuntimeException) - 不影响

Spring 的默认事务机制,当出现unchecked异常时候回滚,checked异常的时候不会回滚

BeanInitializationException

有两个重要的 bean 生命周期方法,第一个是 setup , 它是在容器加载 bean的时候被调用。第二个方法是 teardown 它是在容器卸载类的时候被调用

Spring中的设计模式:

简单工程模式(beanfactory)/单例模式/适配器/代理模式(aop)/观察者(applicationListener)/策略模式/模板方法

循环依赖:

产生原因:

a类:注入b类

b类:注入a类

解决方案:三级缓存(实例化与初始化分开处理/提前暴露对象)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值