Spring常见问题描述

发布时间 2023-03-29 16:42:55作者: sun-sailing

1 渊源 原型在200210由Rod Johnson发布的书中体现,后来在200403spring 1.0版本发布,201709spring 5.0发布,

(1)spring ioc 控制反转,管理容器中的bean,主要使用di依赖注入实现。

  工厂模式,通过sessionFactory去注入实例。

(2)spring Aop 面向切面,调用者和被调用者解藕,用于权限、缓存等功能实现。

spring transaction

事务管理,一通过配置文件,二基于注解

spring mvc

数据,业务,展示分离

spring security

提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以spring应用上下文中配置的bean,为应用提供声明式的安全访问控制功能。

spring schedule

 基于spring能用统一的配置和编码风格来使用schedule方案,支持Jdk time、concurrent、quartz

1.2 spring boot

     由于spring的边界不断的进行扩充,导致了基础配置越来越复杂,spring boot应运而生,201404 springboot 1.0.0发布,其核心思想,约定大于配置。

引入web模块

   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>

开发环境调试

spring-boot-maven-plugin

json接口开发

@RestController

@RequestMapping(“/test”)

自定义filter

@Configuration

@Bean

 自定义配置文件

@Component

@Value(“${asd.sdf}”)

1.3 spring cloud 

      基于spring boot开发,解决微服务架构中的服务治理而提供的开发框架。是一系列框架的有序集合,简化了分布式基础设施的开发,如发现注册,配置中心,消息总线,负载均衡,断路器,数据监控等。

2 Spring bean的作用域 :singleton、prototype、request、session 、global session

<bean=“” class=“” scope=“”/>

(1)singleton单例 缺省作用域:容器中只会存在一个共享的bean实例,无论多少个bean引用他,始终指向一个对象。

(2)prototype原型:每个bean都会创建一个新的bean实例。

(3)request:不同的http request产生不同的bean,该bean只在当前request有效。

(4)session :不同的http session产生不同的bean,该bean仅在当前session有效。

(5)global session:在一个全局的http session中,容器会返回该bean的同一个实例,仅在portlet context时有效

3 Servlet的生命周期:实例化、初始init、接收请求service、销毁destory

4 spring bean实例化顺序

  实例化bean对象

  设置对象属性(依赖注入)

  检验aware相关接口并设置相关依赖

  BeanPostProcessor前置处理

  检查是否是initbean决定是否调用afterpropertiesset

  检查是否配置有init-method

  BeanPostProcessor后置处理,至此Bean就被创建了。

  当bean不需要时,经过i清理阶段,如果实现了DisposableBean接口,则调用destory()

  如果Spring中配置了destroy-method属性, 则调用销毁方法。

5  Spring中Autowired和Resource关键字的区别

相同点:都是bean注入时的注解,变量和setter方法上。

不同点:@Resource不是Spring的注解,包是javax.annotation.Resource,byName查找,从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

    @Autowired是Spring的注解,byType查找,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。

 

spring ioc理解:控制反转,管理容器中的bean,主要使用di依赖注入实现。

  IOC让对象的创建不用去new了,可以由spring自动生产,使用java的反射机制,根据配置文件在运行时动态的去创建对象以及管理对象,并调用对象的方法的。

  依赖注入的方式有几种:构造器注入、setter方法注入、接口注入

(1)构造器注入:将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。

(2)setter方法注入:IoC Service Provider通过调用成员变量提供的setter函数将被依赖对象注入给依赖类。

(3)接口注入:依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参数就是要注入的对象。

7 什么是Spring:是一个轻量级的IOC和AOP容器框架,基于XML的配置,注解的配置,java的配置

  主要有几个模块:Spring Core:是框架的核心,它控制着控制反转和依赖注入等特性、

  Spring Context:在Core和Beans上产生,并提供了访问受限对象的媒介、

  Spring AOP、Spring Dao、

  Spring ORM:全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到关系数据库中的数据上。

  Spring Web、Spring MVC

8 Spring MVC工作流程:核心前端控制器DispatcherServlet,Controller执行返回ModelAndView

9 Spring MVC注解

  @RequestMapping:用于处理请求 url 映射的注解
  @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
  @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
  @RequestParam:注解实现接收http请求的数据。
10 spring Aop理解:数据权限、日志、事务处理
  AOP面向切面,用于与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect)类名上增加注解@Aspect,定义切点@Pointcut。
  实现的关键:代理模式
  (1)静态代理:AspectJ,AOP框架在编译阶段生成AOP代理类,
  (2)动态代理:每次运行时在内存中临时为方法生成一个AOP对象,这个对象包含了全部方法,在特定的切点做了增强,并回调原对象的方法。
 11 Spring框架用了哪些设计模式
  (1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
  (2)单例模式:Bean默认为单例模式。
  (3)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
  (4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
  (5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现--ApplicationListener。