框架

 

1.spring优点

 Spring设计模式

.工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
2.单例模式:Bean默认为单例模式。
3.代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
4.模板方法:用来解决代码重复的问题。比如. RestTemplate, Jms...
5.观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,
Spring上下文
应用上下文即是Spring容器的一种抽象化表述;而我们常见的ApplicationContext本质上
说就是一个维护Bean定义以及对象之间协作关系的高级接口。
IOC
控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,
对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程
序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是
由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间
的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。
控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中
起到了有效的作用。
依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能
对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是
控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?

在 Java 中依然注入有以下三种实现方式:
1. 构造器注入
2. Setter 方法注入
3. 接口注入

 AOP的概念

 

JDK动态代理

实现InvokHandle接口,代理类需要继承接口

CGLIB动态代理,通过继承子类进行代理,ASM字节码生成对象,效率比反射高。

首先通过 

 Spring自动装配

Spring如何解决循环依赖问题

①:构造器的循环依赖。无法解决:因为加入singletonFactories三级缓存的前提是执行了构造器,

所以构造器的循环依赖没法解决

②:  setter循环依赖field属性的循环依赖

setter方式 单例,默认方式(通过递归方法找出当前Bean所依赖的Bean),

然后提前缓存【会放入Cach中】起来。通过提前暴露 -->暴露一个exposedObject用于返回提前暴露的Bean。

https://blog.csdn.net/qq_36381855/article/details/79752689#1577508311688

singletonFactories : 单例对象工厂的cache 
earlySingletonObjects :提前暴光的单例对象的Cache 。【用于检测循环引用,与singletonFactories互斥】

singletonObjects:单例对象的cache

 springboot自动配置原理

 SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。

 @EnableAutoConfiguration的作用是利用AutoConfigurationImportSelector给容器中导入一些组件

 可以查看public String[] selectImports(AnnotationMetadata annotationMetadata)方法的内容。

 通过protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)

 获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories"; 然后把扫描到的这些文件包装成Properties对象。

 从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中。

 整个过程就是将类路径下"META-INF/spring.factories"里面配置的所有EnableAutoConfiguration的值加入到容器中。

 每一个这样XXAutoConfiguration类都是容器中的一个组件都加入到容器中,用他们来做自动配置。

 Spring事务

https://blog.csdn.net/jie_liang/article/details/77600742

spring的bean有哪几种生命周期

 

 

BeanFactory:

是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;

 ApplicationContext:

应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;

1) 国际化(MessageSource)

2) 访问资源,如URL和文件(ResourceLoader)

3) 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层  

4) 消息发送、响应机制(ApplicationEventPublisher)

5) AOP(拦截器)

ApplicationContext实现

1>FileSystemXmlApplicationContext:此容器从一个XML文件中加载bean的定义,

XML Bean配置文件的全路径名必须提供给它的构造函数

2>ClassPathXmlApplicationContext:此容器也从一个XML文件中加载bean的定义,

这里需要正确设置classpath因为这个容器将在classpath里找bean配置

3>WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean

Spring如何处理线程并发问题

利用ThreadLocal以空间换时间

Spring事务的传播行为

 

Spring事务有声明和编程式两种,编程采用t r a n s a c t i o n T e m p l a t e

声明式事务通过AOP功能,对方法前后进行拦截,在进入方法之前加入一个事务,在方法执行完毕之后根据执行结果进行提交或回滚

事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 
例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启

一个新事务运行,这就是由methodB的事务传播行为决定的。

 

 

Springboot问题汇总

https://www.jianshu.com/p/63ad69c480fe/ 

 

Mybatis如何将接口和Mapper联合起来

https://blog.csdn.net/sinat_25991865/article/details/89891581

根据接口名获取对应得带来对象,代理对象调用时,sqlSession.selectList

 

通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?

Dao接口里的方法,参数不同时,方法能重载吗?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 







 

posted on 2020-03-31 22:19  huangzhihao  阅读(191)  评论(0)    收藏  举报