java面试题个人总结宝典3-Spring篇

Spring


Spring作为我项目开发中接触到的第一个框架,发展至今已经可以说是java最主流的框架了,没有之一.其强大之处可见.

Spring是一个轻量级Java开发框架

Ioc容器的依赖注入机制方便解耦,降低代码污染,

支持AOP切面编程,

对各种优秀框架提供了集成支持,简化开发,提高开发效率。


目录

Spring

Spring 3个核心组件:

Spring AOP:

Spring Aop结构/组成部分:

Spring IoC :

BeanFactory 和 ApplicationContext 区别:

Spring Bean 的生命周期(@Scope注解/xml属性scope="prototype"):

Spring 的5种 bean 的作用域:

单例 Beans 是线程安全的么:

Spring 基于 xml 注入 bean 的几种方式:

Spring 的自动装配:

注解装配(也是基于注解的依赖注入方法):

Spring 框架的设计模式:

Spring 事务:

Spring事务2种:

Spring 的事务传播行为:

Spring 事务的隔离级别:

Spring 的事件类型(ApplicationListener监听器 ):

Spring MVC:

Springmvc的三大组件:

Springmvc的工作流程:

SpringMVC常用注解:


Spring 3个核心组件

Beans:Spring管理的对象

Context : 用于建立和维护bean对象之间的关系(即 Ioc 容器)

Core:Spring框架基本的核心工具类

 

Spring AOP:

1.和OOP 面向对象编程不同,aop面向切面编程通过封装可以作用于多个对象的公共行为和逻辑,弥补了oop的缺点,减少代码冗余,降低耦合度。

2.springaop是通过动态代理来实现的,不需要修改字节码文件,而是在程序运行时,创建aop对象,里面包含了对象的所有方法与增强处理。

3.oop+aop的编程模式更有利于提高效率。

 

Spring Aop结构/组成部分:

1.切面(Aspect):被抽取的公共模块,表示切入点与通知的结合关系@AspectJ注解

2.连接点(Join point):aop对象种的所有方法

3.切入点(Pointcut):需要增强的方法,可用切入点表达式(如:* *..*.*())进行类的拦截@Pointcut

4.通知(Advice):切入点中的增强操作(环绕通知@Around:是另外4种通知的综合/前置@Before

,后置@AfterReturning ,异常@AfterThrowing,最终通知@After)

5.目标对象(Target Object):得到aop增强的对象也称为被代理对象(proxied Object)

6.织入(weaving):连接点成为切入点的过程

 

Spring IoC :

IOC 就是控制反转,spring两大核心容器ioc容器和aop容器,ioc是将对象交由spring来集中管理成为bean对象,简单地说就是当我们需要用到一个bean对象时不再需要new关键字,而是通过依赖注入方式来,实现了对象之间的解耦,

 

BeanFactory 和 ApplicationContext 区别:

是 Spring 的两大核心接口和容器,

  1. BeanFactory用于管理bean对象,是bean集合工厂类,ApplicationContext 是 BeanFactory 的子接口, 扩展了功能:支持国际化,统一的资源文件访问方式,在监听器注册bean事件。
  2. BeanFactory采用懒加载方式注入Bean,对象使用时才会实例化,实例化后才知道有没有错误, ApplicationContext是容器启动后预加载所有bean对象,只要有错误则在容器一启动就能马上知道。
  3. ApplicationContext一次性加载所有bean对象,所以更占用空间,可能导致程序启动变慢。
  4. BeanFactory 需要手动注册,而 ApplicationContext 则是自动注册,通过xml或注解方式可以让spring自动配置,但BeanFactory 需要自己编写源代码去配置。

 

Spring Bean 的生命周期(@Scope注解/xml属性scope="prototype"):

  1. 实例化
  2. 依赖注入
  3. 初始化(处理 Aware 接口--预初始化--自定义初始化--后置初始化)
  4. 对象使用
  5. 销毁(容器关闭--调用默认destroy方法,再调用自定义destory方法)

 

Spring 的5种 bean 的作用域:

singleton单例,prototype多例,request请求,sessiong会话域,lobal-session全局会话域

 

单例 Beans 是线程安全的么:

1.一般单例bean都是用于service和dao层,基本不会有共享变量,也就是无状态,随着容器销毁而销毁, 所以 Spring 的单例 bean 是线程安全的。

2.当bean是有状态的也就是有数据存储功能的,当用户不再调用就会销毁,

此时是线程不安全的,将作用域设置成prototype多例即可, 

因为spring对多例bean采用ThreadLocal 的“空间换时间”方式解决线程安全问题。

 

Spring 基于 xml 注入 bean 的几种方式:

1.Setter(property标签)

2.构造器constructor(constructor-arg标签)

3.静态工厂(直接用class属性指定工厂全限定类,factory-method调用静态方法创建bean)

4.实例工厂(先创建实例工厂bean,再用factory-bean引用工厂id,factory-method调用实例方法创建bean)

 

Spring 的自动装配:

Xml装配:

  1. no默认不自动装配,可用ref属性手动装配
  2. byName名称自动装配:property的那么属性和bean的name相同自动装配
  3. constructor构造器自动装配
  4. byType参数类型自动装配
  5. autodetect自动探测装配(构造器自动装配>参数类型自动装配)

 

注解装配(也是基于注解的依赖注入方法):

1. @Autowired 注解装配(类型>名称)(在@Autowired找到了同类型多个类时,用@Qualifier可以指定具体的bean对象名称)

2. @Resource注解装配(名称>类型)=@Autowired+@Qualifier

3. @Value注解(获取properties文件数据/直接标量类型(即基本数据类型+包装类+String)赋值

 

Spring 框架的设计模式:

(1)工厂模式:BeanFactory工厂 ,ApplicationContext工厂;

(2)单例模式:Bean作用域 默认为singleton单例模式。

(3)代理模式:Spring AOP ,用到了 JDK 的动态代理和 CGLIB 字节码生成技术;

(4)模板模式:Template模板:TransactionTemplate,JpaTemplate RestTemplate。

(5)观察者模式: Spring 的 ApplicationListener

(6)适配器模式:Spring 的Interceptor拦截器

(7)装饰者模式:Component下的子类WrapperDecorator

 

 

Spring 事务:

Spring 事务的本质其实就是数据库对事务的支持,数据库层的事务提交和回滚是通过server层的 binlog(二进制日志,用于主从复制) 或者 InnoDB层的redolog(提交)和undolog(回滚) 实现的。

Spring事务2种:

  1. 编程式事务管理:创建TransactionTemplate对象手动编写代码来管理事务
  2. 声明式事务管理:用@Transactional注解,让spring管理事务  

 

Spring 的事务传播行为:

7种行为,这里只提项目种常用的2种:

1.PROPAGATION_REQUIRED默认/常用:没有事务就创建一个,有则加入

2.PROPAGATION_REQUIRES_NEW:有没有事务,都创建一个新事务。

 

Spring 事务的隔离级别:

1.Default:默认/常用:使用数据库的事务隔离级别

2.READ_Commited:读已提交

3.READ_UNCOMMITTED :读未提交

4.REPEATABLE_READ:可重复读(Mysql数据库默认)

5.serializable:串行化

 

Spring 的事件类型(ApplicationListener监听器 ):

  1. 上下文开始事件(ContextStartedEvent)
  2. 请求处理事件(RequestHandledEvent)
  3. 上下文更新事件(ContextRefreshedEvent)
  4. 上下文停止事件(ContextStoppedEvent)
  5. 上下文关闭事件(ContextClosedEvent)

 

Spring MVC:

MVC模式(Model-View-Controller)

控制器(Controller):Servlet,控制器处理用户的请求

视图(View):HTML, JSP, 前端页面框架

模型/持久层(Model):逻辑业务程序(后台的功能程序), Service, Dao, JavaBean

 

Springmvc的三大组件:

1.处理器映射器:RequestMappingHandlerMapping

2.处理器适配器:RequestMappingHandlerAdapter 

3.处理器解析器:ExceptionHandlerExceptionResolver 

 

Springmvc的工作流程

  1. 客户端--(发起请求)-->前端控制器(DispatcherServlet)
  2. DispatcherServlet--(url请求)-->处理器映射器HandlerMapping
  3. HandlerMapping--(生成处理器对象handler)-->DispatcherServlet
  4. dispatchServlet--(handler)-->处理器适配器HandlerAdapter
  5. HandlerAdapter--(执行handler生成ModelAndView)-->DispatcherServlet
  6. DispatcherServlet--(ModelAndView)-->视图解析器(ViewResolver)
  7. ViewResolver--(解析ModelAndView返回view)-->DispatcherServlet
  8. DispatcherServlet--(页面资源)-->客户端

 

SpringMVC常用注解

  1. @RequestParam绑定表单数据
  2. @CookieValue
  3. @RequestHeader
  4. @PathVariable
  5. @SessionAttributes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理,分享圈管理,我的收藏管理,系统管理。用户可以在微信小程序上注册登录,进行每日签到,防疫查询,可以在分享圈里面进行分享自己想要分享的内容,查看和收藏景点以及美食的推荐等操作。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得旅游社交小程序管理工作系统化、规范化。 管理员可以管理用户信息,可以对用户信息添加修改删除。管理员可以对景点推荐信息进行添加修改删除操作。管理员可以对分享圈信息进行添加,修改,删除操作。管理员可以对美食推荐信息进行添加,修改,删除操作。管理员可以对酒店推荐信息进行添加,修改,删除操作。管理员可以对周边推荐信息进行添加,修改,删除操作。 小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块。在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块。用户想要把一些信息分享到分享圈的时候,可以点击新增,然后输入自己想要分享的信息就可以进行分享圈的操作。用户可以在景点推荐里面进行收藏和评论等操作。用户可以在美食推荐模块搜索和查看美食推荐的相关信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值