spring aop ioc mvc 最常见面试

1.spring概述:

spring是一个免费开源的应用框架,旨在降低程序的开发难度,轻量级,松耦合。ioc依赖注入控制反转,aop切面编程能将系统服务与应用逻辑服务隔离,以实现高类聚。mvc对web应用提供了高可配性。事务管理层提供事务管理的抽象层。jdbc提供了jdbc通用的异常层次结构,简化了错误处理策略。

2.aop:

aop即切面编程它与oop相辅相成,它提供了与oop不同的软件结构抽象视角,在oop中对象作为基本单元。在aop中aspect作为基本单元

        aspect由pointcut和advice组成,它既包括横切逻辑的定义也包含了连接点的定义。它的主要工作就是通过pointcut和advice定位到joinpoint上和在advice上编写代码。

        joinpoint就是程序运行的时间点,如方法的执行或异常的处理

        advice就是在特定的joinpoint处,aspect所采取的动作,springaop在joinpoint周围使用advice作为拦截器。

        advice包括before,afterreturning,afterThrow,after,around几种模式

        为创建一个advice对象而链接aspect和其他应用类型对象,称为编织。

aop实现:

        1.引用spring-boot-start-aop依赖项

        2.创建adviceconfig配置类,用configuration注解标记为配置类。用aspect注解标记为切面

        3.用befor,after,around注解标记方法,并表明具体切入方法。

3.ioc

        spring的核心就是ioc容器,他们创建对象,配置和管理对象的完成生命周期。通过依赖注入管理应用程序的组件

        ioc通过工厂模式和反射机制原理实现

        ioc包括beanfactory和applicationcontext两种容器;beanfactory是bean的集合工厂类。它会在客户端的要求时实例化bean,applicationcontext接口扩展了beanfactory。它在beanfactory的基础上提供了一些额外的功能。如支持依赖注入,支持国际化,使用即时加载,自己创建和管理资源对象。

bean生命周期:

1.实例化bean,反射机制,通过creatBeanInstance方法产生。

2.给生成的bean填充属性,通过populateBean方法,循环依赖问题在这里产生。

3.如果实现了beanNameaware方法,则传递对象id,调用setbeanname方法

4.如果实现了beanFactoryaware方法,则传递bean对象,调用setbeanFactory

5.如关联beanPostprocess前置方法则调用前置方法

6.如果实现init方法,则调用init方法

7.如关联beanPostprocess后置方法则调用后置方法

8.如果实现disposableBean方法,则调用detroy方法,制定了distroy方法则调用指定distroy方法

循环依赖:

循环依赖采用三级缓存概念;一级缓存:单列对象,完整bean;二级缓存:早期单列对象,半成品;三级缓存:单列工厂对象

解决过程:

1.通过反射实例化a对象,把a对象的工厂对象放入三级缓存。

2.a属性注入又依赖b对象,b对象实例化把b对象的工厂对象放入三级缓存对象

3.b对象属性注入又依赖a对象,三级缓存中已存在a对象的工厂对象,通过工厂,生产代理对象放入二级缓存后删除三级缓存对象。

4.b对象拿到a代理对象就可以直接完成装配,放入一级缓存。删除三级缓存的工厂对象

5.a对象实例化完成就可以把a对象从二级缓存同步到一级缓存,销毁二级缓存对象。

自动装配:

装配就是当bean在spring容器中组合在一起时,它被称为装配

在spring中提供了自动装配,也就是说可以通过检查beanfactory的内容让spring自动解析bean的协作者

主要模式有:

1.no没有自动装配,默认设值,只有使用显示bean引用进行装配。

2.byname它根据对象的名称注入对象依赖项

3.bytype它根据对象类型注入对象依赖项

4.构造函数 通过调用类的构造函数注入依赖项

5.autodetect首先尝试使用构造函数注入依赖项,如果不能,则尝试通过byname装配

注解装配:

spring容器中为打开注解装配,因此要使用基于注解的装配,我们必须通过配置

.annotation-config>在spring配置文件中启用它

注解:

1.component:是spring管理组件的通用构造型,spring扫描机制可以将其拉入应用环境

2.controller:将一个类标记为spring web mvc控制器。标有它的bean会自动导入到ioc容器中。

3.service:此注解是组件注解的特化,它不会对component注解提供任何其他行为。你可以在服务层中使用service它可以更好的指定意图

4.repository:这个注解是具有类似功能和用途的conponent注解的特化。它为dao提供了额外的好处,它将dao导入ioc容器,并使未经检查的异常有资格转换为springdataAccessexception

5.required:应用于bean的属性setter方法,此注解仅指示必须使用过bean定义的显示属性,或自动装配填充受影响的bean属性,如未填充受影响的bean属性则抛出异常。

6.autowired:作用于setter和构造函数默认情况下它是类型bytype注入,想使用名称,可以结合quaifier注解使用,默认依赖对象必须存在。如果允许为null,可以设置它的requid属性为false

7.resource:resource不是spring的注解,但spring支持该注解的注入,默认按照byname自动注入,有两个重要的属性name和type,name按照name依赖注入,type按照bytype依赖注入。

4.mvc

1.用户发送请求至前端控制器dispatcherservlet

2.dispatcherservlet收到请求调用handermapping处理器映射器

3.处理器映射器找到具体的处理器,生产处理器对象及处理器拦截器-并返回给dispatcherservlet

4.dispatcherservlet调用handlerApter处理器controller

5.controller执行完妇女会modelandview

6.handlerApter将controller执行结果modelandview返回给dispatcherservlet

7.dispatcherservlet将modelandview传给viewreslover视图解析器

8.viewreslover解析返回具体的view

9.dispatcherservlet根据view进行渲染视图相应给用户

你可能感兴趣的:(面试,面试,spring,mvc)