spring入门(面试题)

Spring框架的核心IoC容器和AOP模块。通过IoC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务。

IoC让相互协作的组件保持松散的耦合,而AOP编程允许你把遍布于应用各层的功能分离出来形成可重用的功能组件。

IOC原理
在这里插入图片描述

Spring的优缺点是什么?
优点

  • 方便解耦,简化开发

Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护,交给Spring管理。

  • AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

  • 声明式事务的支持

只需要通过配置就可以完成对事务的管理,而无需手动编程。

  • 方便程序的测试

Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持(如:Struts、Hibernate、MyBatis等)。

  • 降低JavaEE API的使用难度

Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

缺点

  • Spring明明一个很轻量级的框架,却给人感觉大而全
  • Spring依赖反射,反射影响性能
  • 使用门槛升高,入门Spring需要较长时间

Spring框架中的单例bean是线程安全的吗?
不是,Spring框架中的单例bean不是线程安全的。

spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。

实际上大部分时候 spring bean 无状态的(比如 dao 类),所有某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model 对象),那就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了,所以就可以保证线程安全了。

  • 有状态就是有数据存储功能。
  • 无状态就是不会保存数据。

Spring如何处理线程并发问题?
在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域,因为Spring对一些Bean中非线程安全状态采用ThreadLocal进行处理,解决线程安全问题。

ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。而ThreadLocal采用了“空间换时间”的方式。

ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。

解释Spring框架中bean的生命周期
在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后该bean就可以使用了。一旦该bean不再被使用,则由Java自动进行垃圾回收。相比之下,Spring容器中的bean的生命周期就显得相对复杂多了。正确理解Spring bean的生命周期非常重要,因为你或许要利用Spring提供的扩展点来自定义bean的创建过程。下图展示了bean装载到Spring应用上下文中的一个典型的生命周期过程。

在这里插入图片描述

bean在Spring容器中从创建到销毁经历了若干阶段,每一阶段都可以针对Spring如何管理bean进行个性化定制。

正如你所见,在bean准备就绪之前,bean工厂执行了若干启动步骤。

我们对上图进行详细描述:

Spring对bean进行实例化;

Spring将值和bean的引用注入到bean对应的属性中;

如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;

如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;

如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来;

如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization()方法;

如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似地,如果bean使用initmethod声明了初始化方法,该方法也会被调用;

如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法;

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

如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。

现在你已经了解了如何创建和加载一个Spring容器。但是一个空的容器并没有太大的价值,在你把东西放进去之前,它里面什么都没有。为了从Spring的DI(依赖注入)中受益,我们必须将应用对象装配进Spring容器中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/250911.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

spring 入门

Spring 是什么(1) Spring 是一个开源框架.  Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能.  Spring 是一个 IOC(DI) 和 AOP 容器框架. Spring 是什么(2) 具体描述 Spring:  轻量级:Spring 是非侵入性…

spring入门--spring入门案例

spring是一个框架,这个框架可以干很多很多的事情。感觉特别吊。但是,对于初学者来说,很难理解spring到底是干什么的。我刚开始的时候也不懂,后来就跟着敲,在后来虽然懂了,但是依然说不明白它到底是干啥的。…

Spring入门示例

开发环境 Spring 4.3.0Myeclipse2015JDK1.8 准备阶段: 1、新建一Spring01项目,然后新建一个lib文件。将下面的添加到lib文件中 2、将lib文件所有的包导入项目 开发步骤: 1、新建一个Hello.java的类 1 package com.proc.bean;2 3 public class…

Spring入门详解

准备开始看看Spring源码, 所以把Spring复习一遍,做下笔记.. 一. Spring的4种关键策略: 1. 基于POJO的轻量级和最小入侵编程(基本不出现在业务逻辑中, 不用强制实现接口之类的); 2. 通过依赖注入和面向接口来实现松耦…

1.Spring入门

一、Spring入门 1.Spring 入门 Spring 整体框架: 什么是IOC? IOC:Inversion of Control(控制反转),即将对象的创建权反转给(交给)spring。 spring包含的文件: docs&am…

spring入门例子

Hello World入门 2.5.1、准备开发环境和运行环境: ☆开发工具:eclipse ☆运行环境:tomcat6.0.20 ☆工程:动态web工程(springmvc-chapter2) ☆spring框架下载: spring-framework-3.1.1.RELEASE-w…

Spring入门

Spring框架的设计理念 Spring的骨骼架构 Spring总共有十几个组件,但真正核心的组件只有几个,下面是Spring框架的总体架构图 图1 .Spring 框架的总体架构图 从图中可以看出,Spring框架中的核心组件只有三个:Context,Co…

【Spring入门】

Spring01loc&DI 概念:Spring是一种分层的Javaee、Javase应用full-stack(全栈)轻量级开源框架,以ioc(反转控制)和aop(面向切面编程为内核),提供了SpringMVC和SpringJD…

GIT | 日常命令查阅表

最近公司代码管控比较乱,有天就利用分支进行了代码梳理,当时就遇到一些困惑,抽空就把git 再学了一下。 以前我是用git命令的,但是敲命令对我来说还是有点麻烦(主要是git 功力不够),看到有同事用…

Spring入门篇

第1章 概述 本章对课程的情况进行介绍,并介绍框架和Spring概况。 1-1 Spring入门课程简介 (05:56) 1-2 Spring概况 (09:39) 1-3 Spring框架 (04:24) 第2章 Spring IOC容器 介绍Spring IOC容器的基本概念和应用 2-1 IOC及Bean容器 (20:18) 容器中的对象就是Bean…

spring入门总结

spring入门总结 一、spring介绍1、spring是什么2、理念:3、Spring优点:4、缺点5、主要内容: 二、IOC&DI1、使用IOC创建对象的三种方法a、无参构造方法创建b、通过有参构造方法来创建c、通过工厂方法来创建对象 2、配置文件详解3、依赖注入…

Spring 入门

引自:http://www.ibm.com/developerworks/cn/java/wa-spring1/ Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 2005 年 8 月 18 日 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级的、强…

Spring入门须知

Hi ~o(* ̄▽ ̄*)ブ大家好呀! 我是【小阿飞_】,我又来给大家分享知识啦😜 今天分享的是spring入门需要理解的一些概念和一些基础的使用操作,有哪里讲解的不好还请大佬们评论区多多指点😜 本期精彩&…

Spring入门基础

目录 1.Spring的相关概念 2.Spring的核心与设计思想 3.Spring创建与使用 4.更简单地去使用Spring 5.Bean的作用域与生命周期 1.Spring相关概念 1.1 什么是Spring 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个…

Spring入门程序

目录 一、Spring概述二、Spring的体系结构三、Spring的核心容器四、实现步骤 一、Spring概述 spring是当前主流的JavaWeb框架,它是为了解决应用开发复杂性问题而产生的。对于一个Java应用程序员来说,掌握spring框架的使用,是我们基本的一项技…

Spring入门这一篇就够了

前言 前面已经学习了Struts2和Hibernate框架了。接下来学习的是Spring框架…本博文主要是引入Spring框架… Spring介绍 Spring诞生: 侵入式概念 Spring是一种非侵入式的框架… 侵入式 非侵入式 松耦合 前面我们在写程序的时候,都是面向接口编程&#xff…

Spring入门,看这篇就够了

Spring入门,看这篇就够了 文章目录 Spring入门,看这篇就够了一、 初识Spring二、Spring Framework系统架构三、核心概念1.IoC(inversion of control)控制反转2.Bean3.DI(dependency injection)依赖注入 四、…

Spring 入门教程

Spring 入门教程 1、参考资料 尚硅谷-Spring5框架最新版教程(idea版)雷丰阳spring、springmvc、mybatis、spring一站式学习 项目地址:Oneby / spring-learn 2、Spring 概述 2.1、Spring 框架概述 Spring 是轻量级的开源的 JavaEE 框架 Sp…

一文学会Spring,Spring最简单的入门教程(万字好文)

1.Spring概述 1.1 Spring框架是什么 ​ Spring是与2003年兴起的一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面编程(AOP)。Spring是可以在Java SE/EE中使用的轻量级开源框架。 ​ Spring的主要作用…

阿里云的内容识别技术可以实现哪些场景下的智能化应用?

阿里云的内容识别技术可以实现哪些场景下的智能化应用? [本文由阿里云代理商[聚搜云]撰写]   随着人工智能技术的快速发展,阿里云借助自身的技术和资源优势,开发了一种名为“内容识别”的技术。这项技术能够高效、准确地识别出图片、视频、…