Srping篇章

1.1、springIoc的工作流程

        1、ioc也就是控制反转,我认为,他的核心思想就是把对象的控制权交给ioc容器,当应用要使用某个对象的实例。就可以直接从ioc容器中获取,他的好处是降低了程序中对象和对象的耦合性,是的程序的整个体系结构变得更加灵活

        2、Bean的生命方式:在spring中有很多方式生命bean,比如在xml里面配置、通过bean的标签来声明。或者通过注解的方式来声明,spring在启动的时候回去解析这些bean,然后把他们保存在ioc容器里。

        3、ioc的工作流程:我认为可以分为三个阶段

        ①ioc容器初始化阶段,把程序中定义的bean,通过解析加载后生成beandefinition,然后把beandefinition注册到ioc容器中

        ②完成bean的注入,还有就是通过反射对没有设置lazy-init属性的单利bean镜像初始化

        ③最后就是bean的使用级阶段,通常会使用@Autowired从ioc容器中获取指定的bean的实例

1.2、spring中的哪些方式可以把bean注入到ioc容器

        ①使用xml的方式声明bean,spring在启动的时候会加载并解析这个xml,把bean装载到ioc容器

        ②使用@ComponentScan注解来扫描声明了@Controller、@service、@Repository、@Component注解的类

        ③使用@configuration注解声明配置类,使用@bean注解实现bean的定义

1.3、spring中bean的作用域有哪些

        request、session、全局session

1.4、springmvc的理解

        springmvc是springFramework生态里的一个模块,他是在Servlet的基础上,构建了一个基于mvc模式的web框架,简化了传统servlet+jsp模式的web开发方式。并且做了增强和扩展

        ①把传统mvc框架里的controller做了拆分,分成了前端控制器和后端控制器

        ②把model模型拆分成了业务层和数据访问层

        ③在视图层,可以支持不同的视图

        springmvc的整体工作流程:前端请求经过springMvc里的核心控制器,把请求分发到对应的controller里,controller处理完业务逻辑后会返回一个modelAndView,然后核心控制器会寻找视图解析器,找到modelAndView指定的视图,并把数据展示到客户端。

        以上就是对springmvc的理解

1.5、springboot自动装配机制的原理

        我认为,自动装配简单来说,就是自动把第三方组件bean装载到ioc容器里面,这个过程,不需要开发人员去写bean的相关配置,在springboot开发的项目里,我们只需要在启动类上添加@SrpingBootApplication注解就可以实现自动装配

        

我认为,实现自动装配主要依靠三个核心技术,分别是:

1、引入Starter,启动依赖组件的时候,这个组件里面必须要包含一个@Configuration配置类,在这个配置类里面我们需要通过@Bean这个注解声明需要装配到IOC容器里面的Bean对象;

2,扫描第三方jar包的配置类,配置类放在第三方的jar包里面,然后通过SpringBoot中约定优于配置的理念,去把这个配置类的全路径放在classpath:/META-INF/spring.factories文件中,这样SpringBoot就可以知道第三方jar包里面这个配置类的位置,这个步骤主要是用到了Spring里面的SpringFactoriesLoader来完成的;

3、实现配置类的动态加载,SpringBoot拿到所有第三方jar包里面声明的配置类以后,再通过Spring提供的importSelector接口来实现这些配置类的动态加载,从而去完成自动装配的动作。

在我看来,SpringBoot是约定优于配置这一理念下的产物,所以在很多地方都会看到这一类的思想,这让开发人员可以将精力更多聚焦在业务代码的编写上而不在需要去关心和业务无关的配置,上就是我对于SpringBoot自动装配的理解。

1.6、如何理解SpringBoot中的Starter组件

我认为,starter组件是SpringBoot里面的四大特性之一,除此之外,SpringBoot里面还有自动装配,以及Actuator监控等特性。

我认为,SpringBoot里面的这些特性,他的核心思想是减少软件开发人员对于配置项的维护,从而让开发人员的精力更多的聚焦在业务逻辑上;

其中,Starter组件的主要作用,我认为有这么几个,分别是:

1、Starter组件是以功能为纬度,来维护对应jar包的版本依赖,我觉得这非常的友好,因为开发者就可以不用去关心,例如版本冲突所导致的一系列问题;

2、Starter组件会把项目中对应的功能所用到的所有jar包依赖全部导入进来,我认为这点也非常的友好,因为这避免了开发者自己去引入依赖所带来的麻烦;

3、Starter组件内部集成了自动装配机制,也就是说,如果程序依赖对应的Starter组件之后,程序就会自动将其集成到Spring的生态里面;

4、依赖Starter组件以后,这些组件对应的功能,以及所需要维护的外部化的配置也会自动集成到SpringBoot里面,我们只需要在application.properties文件里面进行配置维护就好了,比如redis的starter,只要在applicaton.properties这个文件里面去维护redis的连接信息就可以直接使用了。

在我看来,starter组件几乎完美的体现了SpringBoot的约定优于配置的理念,另外SpringBoot官方还提供了非常多的Starter组件,比如Redis、JPA、MongoDB等等,但是官方并不一定会去维护所有中间件的Starter,所以对于不存在的Starter组件,第三方组件会自己去维护Starter,在命名上,官方的Starter组件和第三方的Starter组件也存在区别,官方维护的Starter组件,是以spring-boot-start-xxx为前缀的,第三方维护的start是以xxx-spring-boot-start为后缀的,这也是一种约定优于配置的体现,以上就是我对这个问题的理解。

1.7SpringBoot的约定优于配置

我认为,约定优于配置呢,是一种软件设计范式,他的核心思想是减少软件开发人员对于配置项的维护,从而让开发人员的精力更多的聚焦在业务逻辑上;

第2个,约定优于配置这一理念下的产物,他类似于Spring框架下的一个脚手架,通过SpringBoot我们可以快速开发基于Spring生态下的应用程序;

第3个,基于传统的Spring框架,开发web应用的时候,我们需要做很多和业务无关,并且只需要做一次的配置项,比如:

a、管理jar包的依赖;

b、web.xml维护;

c、Dispatch-Servlet.xml的维护;

d、应用需要手动部署到Web容器;

e、第三方组件集成到SpringIOC容器的时候,我们也需要对其进行配置和维护。

而在SpringBoot中,这些繁琐的配置不再需要我们去做了,因为SpringBoot已经帮我们做完了,但是,完成这样一个动作的前提,就是基于约定优于配置的思想。

最后,SpringBoot约定优于配置的体现有很多,比如:

a、SpringBoot的Starter启动依赖,他能够帮助我们管理所有的jar包版本;

b、如果当前的应用依赖了web这样的jar包,那么SpringBoot会使用内置Tomcat容器来运行web应用,我们就不再需要手动部署这个应用了;

c、SpringBoot自动装配机制的实现中,通过扫描约定路径下的spring.factories文件去识别配置类,从而实现bean的装载;

d、SpringBoot默认会加载resource目录下的application.properties文件。

我认为,约定优于配置,是一个比较常见的软件设计思想,他的核心本质就是为了更加高效、更加便捷的实现软件系统的开发和维护,以上就是我对这个问题的理解。

1.8SpringBoot的核心注解

我认为说到SpringBoot的核心注解,一定绕不开一个问题,那就是SpringBoot的自动装配机制。

在SpringBoot里面,只需要给启动类加上@SpringBootApplication注解就可以完成自动装配。

@SpringBootApplication是一个复合注解,其实真正实现自动装配的注解是@EnableAutoConfiguration。

我们可以用@ComponentScan注解来扫描声明了@Controller、@Service、@Repository、@Component注解的类;

还有一个@Configruation注解,他的作用是定义配置类,和老版项目的xml配置文件是一个意思。

1.9、Autowired和Resource注解的区别

        1、@Autowired注解是spring提供,只能按照byType注入

              @Resource由j2ee提供,默认按照byName注入

        2、如果发现找到多个bean,那么就会按照byName方式比对。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值