Spring 系列面试题

问题答案
Servlet(类)Java编写的程序,此程序是在服务器端运行的;处理客户端的请求并将其发送到客户端;担当Web浏览器或其他HTTP客户发出的请求,与HTTP服务器上的数据库或应用程序之间的中间层。
Servlet 工作原理

1、Web Client 向Servlet容器(Tomcat)发出Http请求、Servlet容器接收Web Client的请求

2、web服务器接收到请求后将其发送给Servlet

3、Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。

4、Servlet容器创建一个HttpResponse对象

5、Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。

6、HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。

7、HttpServlet调用HttpResponse对象的有关方法,生成响应数据。

8、Servlet容器把HttpServlet的响应结果传给Web Client。

Servlet 生命周期

同一个类型的Servlet对象在Servlet容器中以单例的形式存在

1、加载和实例化 Servlet容器启动时,读取web.xml配置

2、初始化 每个servlet实例,容器只调用一次init()方法 线程安全

3、请求处理(服务) service()方法中 线程不安全

4、服务结束(实例销毁) 应用重新装载,或服务器关闭,以及Servlet很长时间都没有被访问过;调用destroy()方法

介绍Spring IOC

即“控制反转,一种设计思想。Ioc容器来控制对象的创建,装配组件依赖关系、负责组件生命周期管理

优点:松耦合,减少类与类之间依赖,利用对象管理,利于功能复用

IOC 原理

IOC容器---水桶

BeanFactory---最简单水桶接口,能装水,有手提

ApplicationContext---更高大上的水桶接口

BeanDefinition---水

Resource---水源位置

BeanDefinitionReader---打水工具

 

1.把配置xml文件转换成resource

2.利用XmlBeanDefinitionReader完成对xml的解析,将xml Resource里定义的bean对象转换成统一的BeanDefinition

3.将BeanDefinition注册到BeanFactory,完成对BeanFactory的初始化。BeanFactory里将会维护一个BeanDefinition的Map。

依赖注入发生的时间

1.getBean方法向IoC容索要Bean时

2.<Bean>元素配置了lazy-init属性,即让容器在解析注册Bean定义时进行预实例化,触发依赖注入

Spring Bean 生命周期

Spring对bean进行实例化,默认bean是单例;

Spring对bean进行依赖注入

bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁

若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用

依赖注入发生的时间

1.getBean方法向IoC容索要Bean时

2.<Bean>元素配置了lazy-init属性,即让容器在解析注册Bean定义时进行预实例化,触发依赖注入

Spring Bean 生命周期

Spring对bean进行实例化,默认bean是单例;

Spring对bean进行依赖注入

bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁

若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用

如何实例化Bean?

1.构造器实例化Bean constructor-arg

2.静态工厂方式实例化Bean 指定factory-method

3.实例工厂方法实例化Bean 不能指定class属性 指定 factory-bean属性

如何注入Bean的依赖资源?

1.构造器注入(构造器参数) constructor-arg index ,type,name

2.setter方法注入 property p命名空间简化setter注入

3.自动转配注入 bean属性autowire “no”、“byName ”、“byType”、“constructor”

Bean的作用域

bean属性scope

其创建的Bean对象相对于其他Bean对象的请求可见范围

singleton:单例 默认作用域

prototype:每次获取创建新bean

Web应用中的作用域:

request:同一次HTTP请求内,同一个实例,不同请求全新Bean

session:同一次HTTP会话内,,同一个实例,不同会话全新Bean

globalSession:在一个全局的HTTP Session中,一个bean定义对应一个实例类似于session作用域,只是其用于portlet环境的web应用。如果在非portlet环境将视为session作用域。

IOC 注解 获取依赖

<context:annotation-config /> 有助于完全消除Spring配置中<property> 和 <constructor-arg>,但我们仍需要使用<bean>元素显示定义Bean。

@Autowired : 按类型装配;可用在字段、方法、构造器上;默认需要依赖对象必须存在

@Resource : 按名称装配;可用在字段、方法上;

IOC 注解装配Bean

<context:component-scan> 除了完成<context:annotation-config >一样的工作,还允许Spring自动检测Bean和定义Bean,不需要在XML中提供任何bean配置元数据

@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

Spring AOP

面向切面编程

降低耦合性,易扩展

连接点:在哪里能够功能 ;方法上

切入点:想在哪里加入功能

通知:加入什么功能

切面: 通知+切入点 在哪加什么功能

目标对象:对谁加功能

AOP 通知类型

前置通知

后置通知

    后置返回通知

    后置异常通知

    后置最终通知

环绕通知

AOP XML 配置

aop:aspect : 切面 通知+切入点

aop:advisor:用来定义只有一个通知和一个切入点的切面

aop:pointcut:切入点

aop:before:通知

AOP 注解

<aop:aspectj-autoproxy/> 能够使用注解

@AspectJ :切面

@Pointcut :切入点 value:指定切入点表达式(在哪切) argNames:切入点方法参数列表,传递给通知方法同名的参数

@Before :通知 value:指定切入点表达式或命名切入点;

Spring MVC

基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架

作用:

进行更简洁的Web层的开发

与Spring框架集成

支持灵活的URL到页面控制器的映射

Spring MVC 处理流程

1、首先用户发送请求——>DispatcherServlet

2、DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象

3、DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,返回一个ModelAndView对象

4、ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

5、View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

6、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束

Spring Boot

Spring 组件一站式解决方案,简化了使用 Spring 的难度,简化了配置;使用“习惯优于配置”的理念让项目快速运行起来;

优点:快速构建项目;对当前主流框架SSM等,无配置集成;项目可以独立运行;提供监控;提高开发效率;

缺点:依赖太多,中文文档较少

Spring Boot 核心配置文件

参考:

https://blog.csdn.net/zl1zl2zl3/article/details/83715633

application 和 bootstrap 配置文件
Spring Boot 核心注解

@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:             @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描。

spring boot运行原理spring boot运行原理就是容器的思想,先将普遍使用的配置项加载入容器,只有在加载相应jar包的情况下,才能将配置属性通过配置文件加载入服务类。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值