栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring概念

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring概念

一、Spring framework

1、什么是spring

    Spring:包含有多个技术的生态。 
    可以构建java应用 所需要的的基础设施。
    但是通常说的是springframe
​
•   核心解释:
1. Spring frame: Spring底层技术容器框架,是其他spring技术的基础,所有技术都依赖spring框架才能运行;
2. spring是为了解决企业开发业务各层和对象直接耦合的问题;       
ioc控制翻转为解决耦合问题
3. spring是ioc 和aop的容器框架,
4. aop面向切面,做增强。
5. 容器:包含并管理应用对象的生命周期    
​
技术生态--基础:framework--目的--ioc、aop-容器
​

2、spring有什么优缺点?

  ioc
- 1. 集中管理对象
  2. 对象与对象之间耦合度降低
  3. 方便维护对象。方便单例设置、懒加载等bean对象的配置
     ##### aop
     在不修改代码的情况下对业务进行增强,减少重复代码,提高开发效率,维护方便
     在增删改查中添加方法的监控,等和主要业务不想关的公共功能,没有aop就得到代码中修改,使用aop就可以在不修改代码的情况下增强,并且减少重复的代码。
     ###### 声明事务
  4. 提高开发效率,可以从单调烦闷的事务代码中解脱出来,只需@Transactonal注解
     ###### 测试
  5. 方便程序的测试,可以结合junit非常方便的测试Springbean
     ###### 优秀框架
  6. 集成优秀的框架,有非常强大的集成功能,只需简单配置就可以完成第三方集成,归功于底层有非常多的扩展接口
     ###### 降低javaEEapi使用难度
  7. 简化开发,封装很多功能性代码,jdbc,异步调用
     ######  学习
  8. spring底层反射、设计模式都是值得学习,提供非常多的扩展接口供外部拓展
     ##### 缺点
     简化开发,应用层面是没有缺点的,但是简化开发上层使用越简单底层代码就越复杂,很难深入了解底层,集成很多拓展点,和代码迭代,代码量非常庞大。

二、Spring IOC

3、控制翻转的作用

作用:集中管理对象,方便维护,解耦降低耦合度

控制翻转,控制了什么?对象的创建,以前由程序员new创建对象,但是由程序员维护就非常复杂,同时耦合度太高很不方便。所以ioc实现的话,由spring容器进行维护,省去复杂的步骤

实现了解耦:交给ioc创建,bean对象实现高内聚低耦合的特征,再通过DI注入@Autowired实现自动注入等于就是程序员把对象的控制能力交给程序。

4、spring ioc实现机制

工厂+反射;工厂设计模式:通过一个方法创建相应的对象并返回。

反射讲完整类路径放进去,

5、spirng ioc和di区别?

ioc控制翻转,控制对象的创建权。交由spring控制,然后通过autowired注入。di是实现ioc重要的一环。 Spring最新全家桶面试题

6、紧耦合和松耦合有什么区别?

方便更换;
​
紧耦合:
紧密耦合是指类之间高度依赖。
松耦合:
松耦合是通过设计原则,面向对象的五大原则三大特性,
​
    单一职责:将不同功能代码抽取到一个类。
接口分离原则:模块间通过抽象类接口隔离开,鼠标更换、
依赖倒置:
的设计原则来实现的。

7、BeanFactory的作用

BeanFactory是Spring中非常核心的一个顶层接口; 它实现了简单工厂的设计模式,通过调用getBean传入标识生产一Bean,它的主要职责就是生产Bean; 它有非常多的实现类、每个工厂都有不同的职责(单一职责)功能; BeanFactory它也是容器 Spring容器(管理着Bean的生命周期)

8、BeanDefinition的作用

bean的定义信息、指标,bean是哪种类,id是什么,作用域是单例,是不是懒加载的,是不是抽象的,自动装配方式等很多属性都可以进行配置;还可以配置需要注入的属性值。都称作bean的定义信息,在创建bean之前需要拿到bean的定义信息读入到beandefinition中配置一个bean就会产生一个beandefinnation,多了就会用map进行存储,后续就交给bean工厂进行处理,所以它决定着bean的生产方式

newapplication之前,会对定义文件进行读取,beandefination封装定义指标,最后由bean工厂生产对应的对象。

9、BeanFactory 和 ApplicationContext有什么区别?4s、工厂

    生产bean,也是一个容器,管理bean的生命周期。applicationcontext称作bean的上下文。也可以说是spring的容器也管理着spring的声明周期。两个都有getbean方法因为app实现了beanfactory的接口。application生产bean需要通知beanfactory方法,一般使用context,因为做的事情更多,   context可以自动注入为beandifination,factory需要手动注入。 
1注册2环境变量3多语言4事件监听5对外扩展
factory:优点,内存占用小,用于嵌入式设备

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。 依赖关系 ​ BeanFactory:是Spring里面最顶层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。BeanFactory 简单粗暴,可以理解为就是个 HashMap,Key 是 BeanName,Value 是 Bean 实例。通常只提供注册(put),获取(get)这两个功能。我们可以称之为 “低级容器”。 ​ ApplicationContext 可以称之为 “高级容器”。因为他比 BeanFactory 多了更多的功能。他继承了多个接口。因此具备了更多的功能。例如资源的获取,支持多种消息(例如 JSP tag 的支持),对 BeanFactory 多了工具级别的支持等 待。所以你看他的名字,已经不是 BeanFactory 之类的工厂了,而是 “应用上下文”, 代表着整个大容器的所有功能。该接口定义了一个 refresh 方法,此方法是所有阅读 Spring 源码的人的最熟悉的方法,用于刷新整个容器,即重新加载/刷新所有的 bean。 ​ ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能。

10、beanfacory和fanctorybean的区别?

BeanFactory是一个工厂,也就是一个容器,是来管理和生产bean的; FactoryBean是一个bean,但是它是一个特殊的bean,所以也是由BeanFactory来管理的, 它是一个接口,他必须被一个bean去实现,可以理解成一个工厂方法,是一个能产生或者修饰对象生成的工厂Bean,里面的getObject()就是用来获取FactoryBean产生的对象。所以在BeanFactory中使用“&”来得到FactoryBean本身,而factorybean本身变成懒加载。

**IOC容器的加载过程**

从概念态--->定义态的过程
1、创建一个spring的容器:实例化一个ApplicationContext的对象; 
2:调用bean工厂后置处理器(invoke)完成扫描,解析配置类; 
3:循环解析扫描出来的类信息。class信息,其中有@componet注解会被注册为beandefination; 
4、实例化一个BeanDefinition对象来存储解析出来的信息存入map对象; 
5、把实例化好的beanDefinition对象put到beanDefinitionMap当中缓存起来, 
以便后面实例化bean; 
6、再次调用其他bean工厂后置处理器;
从定义态到纯净态
​
​
7:当然spring还会干很多事情,比如国际化,比如注册BeanPostProcessor等 
等,如果我们只关心如何实例化一个bean的话那么这一步就是spring调用 
finishBeanFactoryInitialization方法来实例化单例的bean,实例化之前spring要做验证, 
需要遍历所有扫描出来的类,依次判断这个bean是否Lazy,是否prototype,是否 
abstract等等; 
8:如果验证完成spring在实例化一个bean之前需要推断构造方法,因为spring实 
例化对象是通过构造方法反射,故而需要知道用哪个构造方法; 
9:推断完构造方法之后spring调用构造方法反射实例化一个对象;注意我这里说 
的是对象、对象、对象;这个时候对象已经实例化出来了,但是并不是一个完整的bean, 
最简单的体现是这个时候实例化出来的对象属性是没有注入,所以不是一个完整的bean;
从纯净态到成熟态
10:spring处理合并后的beanDefinition 
11:判断是否需要完成属性注入
12:如果需要完成属性注入,则开始注入属性
初始化
13、判断bean的类型回调Aware接口 
14、调用生命周期回调方法 
15、如果需要代理则完成代理
创建完成  
16、put到单例池——bean完成——存在spring容器当中

每一条bean的语句,通过invokebeanfacrotypostprocessors(解析配置类中的注解,获取包中所有的.class文件,检索其中的component转换成beandefination。 ​ 然后交给beanfactory生产bean,调用getbean通过工厂设计模式生产bean。过程中会判断是否符合生产标准,{单例、不是懒加载、不是抽象}才会在ioc加载过程进行生产。

然后进行实例化。和属性赋值也就是di的实现,会根据自动注入的类型,最后进行初始化会存入map中,key是bean的名字,value是bean的对象getkey就可以拿到当前bean

11.你知道Spring的哪些扩展点,在什么时候调用?

扩展接口的种类,注册beandefination过程当中,可以用来动态注册beandefintion的beandefinitionregistryPostProcessor可以注册bean定义的扩展接口,还有可以拿到bean工厂做任何扩展的一个beanfactorypostprocess,在注册bean定义时候会调用这两个扩展接口。

然后在bean生产的过程当中,会调用9次bean后置处理器,beanpostprocessor成为bean的后置处理器。

然后在初始化阶段,会调用很多aware接口。会调用很多的生命周期回调方法,就是初始化和销毁的回调方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号