Spring框架

  • 一、spring框架是啥
    • 1.1 是什么?
    • 1.2 Spring的优势
    • 1.3 体系结构
    • 1.4 快速入门开发步骤
      • 1.4.1快速入门中涉及spring核心配置文件中的一个标签
      • 1.4.2快速入门中涉及标签代表的bean的实例化时机
      • 1.4.3快速入门中涉及标签代表的bean生命周期配置
      • 1.4.4Bean实例化三种方式
  • 二、spring框架的IOC常见面试题(反转控制(创建权移交))
    • 2.1、什么是Spring IOC 容器?
    • 2.2、 聊一下IOC的优缺点?
    • 2.3、有哪些不同类型的依赖注入方式?
    • 2.4、谈谈Spring IOC 与 DI的理解
    • 2.5、IOC的意义何在?
  • 三、spring框架的AOP常见面试题(面对切面编程)
    • 3.1AOP是什么?面向切面编程,不修改源码进行主干功能增强
    • 3.1 AOP的应用场景有哪些呢?
    • 3.2springAop的底层是怎样实现的?
    • 3.3 是编译时期进行织入,还是运行期进行织入?
    • 3.4 初始化时期织入还是获取对象时织入?
    • 3.5 spring AOP 默认使用jdk动态代理还是cglib?
    • 3.6 spring AOP 和 AspectJ的关系?
    • 3.7 能不能简单说下AOP中的切面、切点、连接点、通知,四者的关系?

一、spring框架是啥

1.1 是什么?

、Spring是分层的 Java SE/EE应用 full-stack (全栈:各层都有解决方案)轻(轻和重的理解(轻:小巧,api使用简单 学习成本低))量级开源框架,以IoC(Inverse Of Control:反转控制 :控制谁 反转谁 --》bean的创建权)、AOP(Aspect Oriented Programming:面向切面编程)为内核。提供了展现层 SpringMVC(web层)和持久层 Spring JDBCTemplate(Dao层)以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架

1.2 Spring的优势

1、方便解耦(把对象的创建权给spring完成 在获取对象时不用去new 而是去找容器),简化开发(IOC(这个容器)控制反转)
2、AOP(是一种思想) 编程的支持
3、声明式事务的支持:可以将我们从单调范梦的事物管理代码中解脱,通过声明式配置事务
4、方便程序的测试
5、方便继承各种优秀的框架
6、降低javaee API的使用难度:对之前工具的封装 封装后叫–》莫莫的模版
7、java源码经典学习范例

1.3 体系结构


体系的具体解析:
test:是说 整个spring都可以进行test 测试
sp EL(expression language)(表达式语言)
核心容器的学习 可以理解为 学习IOC的知识点
数据访问层 ---- web

1.4 快速入门开发步骤

①导入 Spring 开发的基本包坐标
②编写 Dao 接口和实现类(bean bean不单止entity包下的标准类)
③创建 Spring 核心配置文件
④在 Spring 配置文件中配置 UserDaoImpl
⑤使用 Spring 的 API (spring客户端对象 applicationcontext) 获得 Bean 实例

1.4.1快速入门中涉及spring核心配置文件中的一个标签

基本属性:
id:Bean实例在Spring容器中的唯一标识
class:Bean的全限定名称
特殊属性:
scope:指对象的作用范围,取值如下:

取值范围 说明
singleton 默认值 ,单例的
prototype 多例的
request WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中
session WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中
global session WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于 session

1.4.2快速入门中涉及标签代表的bean的实例化时机

1)当scope的取值为singleton时: Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
2)当scope的取值为prototype时:当调用getBean()方法时实例化Bean

1.4.3快速入门中涉及标签代表的bean生命周期配置

1)当scope的取值为singleton时:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2)当scope的取值为prototype时:
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器(JC垃圾回收机制)回收了
3)相关属性
init-method:指定类中的初始化方法名称
destroy-method:指定类中销毁方法名称 ,手动关容器

1.4.4Bean实例化三种方式

1) 使用无参构造方法实例化
2) 工厂静态方法实例化
3) 工厂实例方法实例化

二、spring框架的IOC常见面试题(反转控制(创建权移交))

2.1、什么是Spring IOC 容器?

IOC称为控制反转,也有一种说法叫DI(依赖注入)。IOC也是spring最核心的模块,Spring的所有工作几乎都围绕着IOC展开。什么是控制反转呢?简单的说,控制反转就是把我们要做的事情交给别人来做,就像是招了个小弟专门为我们做事情,我们需要做好的东西时直接去找小弟拿。这里要做的事情就是new 一个对象。我们不再自己去new对象然后使用,而是spring容器帮我们去创建对象然后我们要用的时候直接去拿就行了。spring帮我们生成对象就是控制反转,而我们要用对象从spring取对象就是依赖注入。

2.2、 聊一下IOC的优缺点?

spring以动态灵活的方式来管理对象 , 注入的两种方式,set注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。

2.3、有哪些不同类型的依赖注入方式?

构造器注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

Set方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

注解注入方式:引入注解约束,配置组件扫描。类上的注解: @Conponent @Controller @Service @Repository,普通属性的注解 @value,对象属性的注解 @Resource @Autowired @Qualifier,Bean生命周期,初始化与销毁: @PostConstruct @PreDestroy,Bean作用范围:@Scope(“prototype”) , 默认是singleton

2.4、谈谈Spring IOC 与 DI的理解

A、较浅的层次——从名字上解析
“控制”就是指对 对象的创建、维护、销毁等生命周期的控制,这个过程一般是由我们的程序去主动控制的,如使用new关键字去创建一个对象(创建),在使用过程中保持引用(维护),在失去全部引用后由GC去回收对象(销毁)
“反转”就是指对 对象的创建、维护、销毁等生命周期的控制由程序控制改为由IOC容器控制,需要某个对象时就直接通过名字去IOC容器中获取。
B、更深的层次——提到DI,依赖注入,是IOC的一种重要实现
一个对象的创建往往会涉及到其他对象的创建,比如一个对象A的成员变量持有着另一个对象B的引用,这就是依赖,A依赖于B。IOC机制既然负责了对象的创建,那么这个依赖关系也就必须由IOC容器负责起来。负责的方式就是DI——依赖注入,通过将依赖关系写入配置文件,然后在创建有依赖关系的对象时,由IOC容器注入依赖的对象,如在创建A时,检查到有依赖关系,IOC容器就把A依赖的对象B创建后注入到A中(组装,通过反射机制实现),然后把A返回给对象请求者,完成工作。

2.5、IOC的意义何在?

IOC并没有实现更多的功能,但它的存在使我们不需要很多代码、不需要考虑对象间复杂的耦合关系就能从IOC容器中获取合适的对象,而且提供了对 对象的可靠的管理,极大地降低了开发的复杂性。

三、spring框架的AOP常见面试题(面对切面编程)

3.1AOP是什么?面向切面编程,不修改源码进行主干功能增强

与OOP对比,面向切面,传统的OOP开发中的代码逻辑是至上而下的过程中会长生一些横切性问题,这些横切性的问题和我们的主业务逻辑关系不会散落在代码的各个地方,造成难以维护,AOP的编程思想就是把业务逻辑和横切的问题进行分离,从而达到解耦的目的,使代码的重用性和开发效率高(目的是重用代码,把公共的代码抽取出来)

3.1 AOP的应用场景有哪些呢?

1、日志记录
2、权限验证
3、效率检查(个人在代码上,喜欢用注解+切面,实现校验,redis分布式锁等功能)
4、事务管理(spring 的事务就是用AOP实现的)

3.2springAop的底层是怎样实现的?

1、JDK动态代理
2、CGLIB代理

3.3 是编译时期进行织入,还是运行期进行织入?

---->运行期,生成字节码,再加载到虚拟机中,JDK是利用反射原理,CGLIB使用了ASM原理。

3.4 初始化时期织入还是获取对象时织入?

----》初始化的时候,已经将目标对象进行代理,放入到spring 容器中

3.5 spring AOP 默认使用jdk动态代理还是cglib?

-----》要看条件,如果实现了接口的类,是使用jdk。如果没实现接口,就使用cglib。

3.6 spring AOP 和 AspectJ的关系?

1、两者都是为了实现AOP这个目的,而出现的技术,spring aop 参考 AspectJ编程风格
—》这里有个故事就是,原本spring aop 初期的时候所用的编程风格,让人用起来,很不方便,而且让人看不懂。后来,spring aop 就开始取用了Aspectj的编程风格去进行编程

3.7 能不能简单说下AOP中的切面、切点、连接点、通知,四者的关系?

aspect 切面
Point cut (如果理解了这个切点的概念,就在应用方面完全是可以的了)表示连接点的集合(类似一个表)
Join point 目标对象中的方法(每一条记录)
weaving 把代理逻辑加入到目标对象上的过程叫做织入
advice 通知类型

关于spring框架相关推荐

  1. Spring框架系列之AOP思想

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.AOP概述 (1).什么是 AOP AOP 为 Aspect Oriented Progra ...

  2. Java扫描配置文件的注解_详解Spring框架注解扫描开启之配置细节

    前言 Spring框架对Bean进行装配提供了很灵活的方式,下面归纳一下主要的方式: 在XML中进行显示配置 在Java中进行显示配置 隐式的bean发现机制和自动装配 而自动装配实现就需要注解扫描, ...

  3. spring 全局变量_[Spring]-Spring框架-02-IOC容器

    Spring框架 IOC容器 理解IOC容器和DI依赖注入 IOC容器 Inverser Of Control反转控制 就是把原来在程序中创建HelloService对象的控制权限交给Spring管理 ...

  4. spring 框架学习(一)

    1.spring简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成 ...

  5. 阿里三面让我现场改造Spring框架,明天带他去爬山!

    作为一个Java程序员,提到开源框架,Spring无疑是绕不过去的门槛,相信大家对它都不陌生,或多或少都用过. 但是如果谈到改造Spring框架,实现它的自定义扩展,以及大厂面试必问的源码,很多人就会 ...

  6. 使用Spring框架实现远程服务暴露与调用

    一.前言 Spring框架提供了通过HTTP协议实现远程调用的方式,具体是调用方使用HttpInvokerProxyFactoryBean生成一个代理对象,通过代理对象远程通过http服务调用服务提供 ...

  7. eclipse导入Spring框架

    大家都说Spring框架好,而且之后的培训也会遇到框架,所以趁今天有点时间就看了一下Spring框架,这篇文章也是看后的一点小小的理解,非常的基础,大神请主动走开....好了不说的,看看我理解的Spr ...

  8. spring学习12 -Spring 框架模块以及面试常见问题注解等

    以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式-在AOP和remoting中被用的比较 ...

  9. 使用Spring框架的好处

    转自:https://www.cnblogs.com/hoobey/p/6032506.html 在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JD ...

  10. Spring 系列: Spring 框架简介

    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. 在这篇由三部 ...

最新文章

  1. Ubuntu E: Unable to locate package错误解决办法
  2. 正确使用 Android 性能分析工具——TraceView
  3. 数据库——MongoDB增删改查
  4. android栈式存储,线性表数据结构解读(三)栈结构Stack
  5. idea:打包jar(原文by曲高终和寡)
  6. Eclipse用户使用IntelliJ IDEA的常见问答
  7. python正则表达式中的转义字符_python 正则表达式之转义字符
  8. 2 在会计中未发现任何后继凭证
  9. sqlyog同步mysql_大坑:用SQLyog连mysql的部分操作不能同步到从库
  10. 现代化多媒体教室的计算机系统,多媒体教室系统建设方案
  11. 南大通用极速内存数据库
  12. uva 10247 - Complete Tree Labeling(dp)
  13. 计算机丢失msvcr100.dll解决办法,如何解决Msvcr100.dll丢失问题?两种方法可以解决...
  14. NIOS系统固化方法汇总(详细步骤)
  15. python操作格林威治时间
  16. django 标签verbatim的使用 200312
  17. ipad随航黑屏连接失败等问题解决旧版mac随航ipad2017随航
  18. WebView深究之Android是如何实现webview初始化的
  19. 陕西计算机考研难度排行榜,陕西地区计算机考研院校分析「建议收藏」「最全」...
  20. 【pytest】pytest的Hook函数详解

热门文章

  1. Linux离线安装pyhive使用 python连接hive
  2. SpringBoot测试类
  3. Fragstats 提示错误与警告
  4. 在Octane中提升渲染速度的技巧(第1部分)
  5. 从浏览器大战看未来软件发展
  6. mapgis67安装输入计算机名称,mapgis67_dogserver67.exe_mapgis67安装教程
  7. 注册公司选小规模还是一般人?四种判别方式讲得明明白白
  8. win7小工具打不开_有了这个工具,小白也能设置一键网络共享文件夹与打印机...
  9. 基于Matlab的SLIC超像素分割算法分析
  10. JDK与Eclipse版本