问题 | 答案 |
---|---|
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用于标注业务层组件、 |
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 核心配置文件 参考: | application 和 bootstrap 配置文件 |
Spring Boot 核心注解 | @SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解: @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。 @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。 @ComponentScan:Spring组件扫描。 |
spring boot运行原理 | spring boot运行原理就是容器的思想,先将普遍使用的配置项加载入容器,只有在加载相应jar包的情况下,才能将配置属性通过配置文件加载入服务类。 |