Spring常见概览

用组策略大批量无感安装软件,如ipguard客户端、glpi客户端 本文介绍通过组策略批量无感安装ipguard和glpi客户端的方法,包括修改msi包、利用软件安装功能和即时任务计划,还提及命令行安装方式及相关注意事项与参考资料。 阅读详情

目录

1、IOC是什么

2、DI是什么

3、AOP

4、Spring Bean的生命周期

5、spring容器启动流程

6、BeanFactory和ApplicationContext有什么区别?

7、spring怎么解决循环依赖的问题

8、spring mvc流程

1、IOC是什么

控制反转:将对象的控制权转移给Spring框架,由 Spring 来负责控制对象的生命周期(比如创建、销毁、注入依赖对象)和对象间的依赖关系。控制对象生命周期的不再是引用它的对象,而是Spring容器,而引用对象只是被动的接受依赖对象,所以这叫控制反转。

2、DI是什么

依赖注入:IoC 的一个重点就是在程序运行时,动态的向某个对象提供它所需要的其他对象,这一点是通过DI(Dependency Injection,依赖注入)来实现的,即应用程序在运行时依赖 IoC 容器来动态注入对象所需要的外部依赖。而 Spring 的 DI 具体就是通过反射实现注入的,反射允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性。

3、AOP

面向切面编程:作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块。

a、AOP实现的关键在于代理模式,AOP代理主要分为静态代理和动态代理。

静态代理的代表为AspectJ,也称为编译时增强,AOP框架会在编译阶段生成AOP代理类,并将AspectJ(切面) 织入到Java字节码中,运行的时候就是增强之后的AOP对象;

b、动态代理则以Spring AOP为代表,动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理

  • JDK动态代理:只提供接口的代理,不支持类的代理,核心是InvocationHandler接口和Proxy类。在获取代理对象时,使用Proxy类来动态创建目标类的代理类。
  • CGLIB动态代理:如果被代理类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一个子类对象。

4、Spring Bean的生命周期

spring bean生命周期流程

 代码解释

public class SpringTest implements BeanNameAware,BeanPostProcessor, InitializingBean, DisposableBean {

    //1、实例化bean。调用createBean进行实例化

    //2、设置对象属性。通过BeanWrapper提供的设置属性的接口完成属性设置与依赖注入

    //3、处理Aware接口。可以让我们拿到Spring容器的一些资源。如:BeanNameAware、BeanFactoryAware、ApplicationContextAware
    @Override
    public void setBeanName(String beanName) {

    }

    //4、BeanPostProcessor前置处理
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }


    //5、InitializingBean.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法。
    //init-method:如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法
    @Override
    public void afterPropertiesSet() throws Exception {

    }

    //6、BeanPostProcessor后置处理。这个方法是在Bean初始化结束时调用的,被应用于内存或缓存技术。
    //到这里Bean就已经被正确创建了,之后可以使用这个Bean了
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
    }

    //7、bean不再被使用时,如果实现了DisposableBean接口,会调用destroy()方法
    //destroy-method:最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法
    @Override
    public void destroy() throws Exception {

    }
}

5、spring容器启动流程

6、BeanFactory和ApplicationContext有什么区别?

a、BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。

b、BeanFactory是IoC的核心,定义了IoC的基本功能,包含了Bean的生命周期管理。

c、ApplicationContext接口是BeanFactory的子类,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能

  • 继承MessageSource,因此支持国际化。
  • 资源文件访问,如URL和文件(ResourceLoader)。
  • 载入多个(有继承关系)上下文(即同时加载多个配置文件) ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。
  • 提供在监听器中注册bean的事件。

d、BeanFactroy采用的是延迟加载形式来注入Bean的,只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能提前发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。

e、ApplicationContext它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。 不足是占用内存空间,当应用程序配置Bean较多时,程序启动较慢。

f、BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。

g、BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader。

7、spring怎么解决循环依赖的问题

1、Spring是通过三级缓存来解决上述问题的

一级缓存: singletonObjects存储的是所有创建好了的单例Bean
二级缓存:earlySingletonObjects完成实例化,但是还未进行属性注入及初始化的对象
三级缓存:singletonFactories提前暴露的一个单例工厂,二级缓存中存储的就是从这个工厂中获取到的对象。

为什么要有三级缓存

  • 先获取到三级缓存中的工厂;
  • 调用对象工工厂的getObject方法来获取到对应的对象,得到这个对象后将其注入到B中。紧接着B会走完它的生命周期流程,包括初始化、后置处理器等。
  • 当B创建完后,会将B再注入到A中,此时A再完成它的整个生命周期。至此,循环依赖结束!

8、spring mvc流程

  1. 用户发送请求至前端控制器DispatcherServlet;
  2. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler;
  3. 处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet;
  4. DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler;
  5. HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑;
  6. Handler执行完成返回ModelAndView;
  7. HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
  8. DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
  9. ViewResolver解析后返回具体View;
  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户。
     

参考:

1、spring必读:Spring常见面试题总结(超详细回答)_张维鹏的博客-优快云博客_spring面试题

2、spring mvc:SpringMVC常见面试题总结(超详细回答)_张维鹏的博客-优快云博客_springmvc面试题

3、循环依赖解决:

Spring如何解决循环依赖问题_张维鹏的博客-优快云博客_spring解决循环依赖的问题

Spring如何解决循环依赖_飘飘~的博客-优快云博客

Visual Studio程序项目打包为可安装客户端软件(生成exe文件运行安装) 全面图文教程 Visual Studio程序项目打包为可安装客户端软件,连接数据库生成 exe文件运行 阅读详情

相关推荐

MQTT客户端软件(MQTT.fx)的使用详解

MQTT客户端软件MQTT.fx的使用详解一级目录 一级目录

Kunaly 5万+

金仓数据库客户端安装部署

输入绝对路径,用做软件安装目录(输入之前规划的/home/kingbase/KingbaseES/V8),按enter键继续,提示路径是否正确,无问题后,回车继续安装。用户许可协议条款,按照提示enter键继续,直至显示“是否接受此许可协议条款”时,输入Y或者N。显示安装信息,如果信息有误,输入“BACK”进行更改,如果信息无误,按enter键继续。选择1完全安装、2客户端安装或3定制化安装,默认完全安装,这里我们选2客户端安装,回车。注意:安装数据库时,必须使用非root用户安装。

weixin_45105073的博客 1631

3DE重客户端安装

3DE重客户端安装

m0_48170265的博客 9429

Oracle11g客户端安装配置

文章目录一、Oracle数据库客户端的安装1、下载软件安装包2、解压运行安装程序二、PL/SQL Developer的安装1、下载软件安装包2、安装软件包三、配置Oracle客户端环境1、配置数据库参数2、启动PL/SQL Developer软件在这里插入图片描述 3、打开SQL窗口4、执行SQL语句5、最常用的Objects窗口四、客户端环境变量1、Path环境变量2、注册表五、判断客户端是否能...

C语言实战技术 2072

Veritas Backup Exec备份软件服务器、客户端安装以及如何设置备份任务

一、交付邮件 目前软件交付基本都是通过邮件进行。备份软件交付邮件中附件包含序列号以及购买产品信息。购买者邮件在官网注册才有下载权限,同时400支持邮件也是此邮箱。 二、官网软件下载 登录官网:https://www.veritas.com/support/en_US 此处可以创建case寻求技术支持。 进入download页面,可以看到购买产品,点击进行下载,下载包是BE-DVD-1200.2255.iso 三、备份服务端安装 安装教程请跳转该连接 安装环境:win srv 2012 R2 stand

asdhls的博客 8020

FileZilla软件安装教程

软件简介 FileZilla是一个免费、开源的跨平台 FTP应用程序,由客户端和服务器组成。客户端二进制文件可用于Windows、Linux和macOS,服务器二进制文件仅适用于 Windows。服务器和客户端都支持FTP和 FTPS(SSL/TLS 上的 FTP),而客户端还可以连接到SFTP服务器。 下载地址 官网地址:https://filezilla-project.org/download.php?type=client(国内需挂VPN下载) 中文网站:https://www.filezilla

XavierJ的博客 1万+

华为U2000客户端安装过程

一、 背景最近安装部署了otn8800和9800,需要安装网管软件,在虚拟机上安装完成ovf版本的服务器端,需要在电脑上安装客户端二.、安装问题在物理机和虚拟机上下载相关的软件:jre-8u221-w...

cengpaxie0623的博客 4396

java实现windows下客户端软件的下载安装和检测

最近我们有个客户端,需要在不同os系统上安装客户端程序并实时检测其进程是否OK,整体的设计思路,由jenkins的分布式调度策略来分发在不同机器上执行下载安装和检测程序,如图: java实现windows exe文件的下载、安装、进程检测。贴一段代码如下: private final static String OS_NAME="os.name"; private f

风-清的专栏 1882

软件更新服务之客户端更新

软件更新服务之客户端更新 在现在的软件开发和使用中,软件的更新是很关键的一环。通过不停的更新软件,迭代,给用户带来更好的体验和更多的功能以及修复用户反馈的bug。我们在更新的软件的时候,如果每次都要用户从新安装软件的话,想必体验也不会很好,也很麻烦,浪费不必要的资源。 那么今天就继续给大家说要一下软件更新服务里面的客户度端更新。有些后面关注的同学没看到前面写的那篇服务端搭建的文章的话,可以待会出...

CBR97的博客 1622

Redis客户端介绍及安装

安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。

Ruishine的博客 3963

汉王考勤程序驱动软件安装

软件安装 1 安装目录可以自己选择,解压软件 2 进入v7_setup目录,双击Setup.exe程序,开始安装; 3 安装步骤,一般都是默认,点击下一步,直至安装完成 4 安装完成,会有2个图标,一个汉王考勤管理系统服务端,一个汉王考勤管理系统客户端。 5 启动软件,需先启动服务端,再启动客户端 5.1 启动服务端,右下角有个软件图标,双击打开,测试连接,数据库连接成功即为服务端正常 5.2 启动客户端,默认账号密码都是adm

王NA的博客 5233

Linux安装FRP客户端

前言 frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。 对安装FRP服务端不熟悉的朋友可以去看看这篇教程:传送门 一、服务器端安装frps 进入安装目录(本文以/usr/local/为例) cd /usr/local 安装frps文件 wget https://gi...

MojxTang_Blog 5809

SVN服务端客户端安装配置

这里需要注意:第一个目录是软件安装目录,可以默认位置,第二个目录是客户端上传的位置目录,可以换成除C盘之外的路径,我这里只有一个C盘没有换别的盘符,读者注意即可。选择【I accept the terms in the License Agreement】点击【Next】在任意位置新建文件夹,这里个文件来是要存放SVN的本地文件夹,建议放在除了C盘之外的目录中。选择【设置】 ,打开设置面板, 可以设置语言:选择中文。调整软件安装位置,点击【Next】双击下载的文件,点击【Next】

优快云_Admin0的博客 1970

Mac MongoDB客户端MongoBooster安装教程分享

mongobooster拥有多种设计工具,在可视化方面的运用非常广泛,不仅是针对MongoDB数据库而已,其连接的方式也非常简单,让您可以轻松访问MongoDB服务器,实现数据可视化操作!今天要给大家分享的是Mac MongoDB客户端MongoBooster安装教程,希望对大家有所帮助! mongobooster mac安装教程 注意!安装mongobooster mac需要在host文...

weixin_44886772的博客 1296

NetBackup 8.2 LinuxR 服务器安装及使用 ssh 方法将客户端软件从 UNIX 主服务器安装到 UNIX 客户端(持续更新)

部署linux下netbackup 8.2 参考: https://www.cnblogs.com/061713xlhj/articles/10628092.html 10.1.4.136安装NetBackup 8.2 LinuxR 服务端简单步骤 tar -zxvf NetBackup_8.2_LinuxR_x86_64.tar.gz cd NetBackup_8.2_LinuxR_x86_6...

新海 6093

C#做MES中FTP代码怎么写?客户端,服务端如何安装测试?

FTP服务器子目录文件夹 //没有子目录文件夹传"/"即可,有子目录文件夹传"/"+文件名+"/"/// FTP服务器子目录文件夹

m0_61199122的博客 2305

如何在 Ubuntu 20.04 Linux 上安装 TeamSpeak 客户端

本文介绍了在Linux系统上安装TeamSpeak语音会议软件的详细步骤。首先下载官方客户端文件并赋予执行权限,然后通过终端运行安装程序完成安装。接着将安装目录移动到/opt路径下,创建桌面快捷方式和启动器图标以便快速访问。针对Arch Linux用户,可以直接通过pacman命令安装。整个过程涵盖了从下载到配置的所有环节,帮助用户在Ubuntu、Debora、Arch等主流Linux发行版上顺利使用这款经典语音通信工具。

山岚的运维笔记 1685

Oracle数据库客户端安装与配置

一.Oracle 11G Client 客户端安装步骤(图文详解)注意:我们最好下载32位的客户端,因为这样可以搭配PLDeveloperSQL(只有32位)使用,Oracle客户端的位数和Oracle服务器的位数没有关系,即64位的Oracle服务器可以搭配使用64bit和32 bit的客户端。下载地址:http://download.oracle.com/otn/nt/or...

ptsx0607的专栏 1万+
上一篇: 数据结构简介
下一篇: 频繁full gc cpu 100%
九号铅笔芯
博客等级 码龄9年 9粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值