Spring的相关面试题

为什么选择使用Spring框架?

  1. 使用它的IOC功能,在解耦上达到了顶级的配置.
  2. 使用它对数据库访问事务相关的封装.
  3. 各种其他组件与Spring的融合,在 Spring中更加方便的快捷的继承其他的一些组件.

Spring是如何管理事务的?

Spring的事务声明有两种方式,编程式和声明式.Spring主要是通过"声明式事务"的方式对事务进行管理,即在配置文件中进行声明,通过AOP将事务切面切入程序,最大的好处就是大大减少了代码量.
(就是在配置文件中添加一个transaction配置文件,里边声明事务管理器,再配置声明事务标识,直接在类上加注解就可以了)

Spring IOC容器配置Bean的方式?

1.基于XML文件进行配置(

  • 通过全限定类名,

在这里插入图片描述

  • 静态方法,

在这里插入图片描述

package com.itheima.spring.factory;

import com.itheima.spring.service.AccountService;
import com.itheima.spring.service.AccountServiceImpl;

public class StaticFactory {

    public static AccountService createAccountService() {
        return new AccountServiceImpl();
    }
}
  • 动态实例化方法,

在这里插入图片描述

package com.itheima.spring.factory;

import com.itheima.spring.service.AccountService;
import com.itheima.spring.service.AccountServiceImpl;

public class InstanceFactory {

    public AccountService createAccountService() {
        return new AccountServiceImpl();
    }
}

).
2.w基于注解进行配置(注解扫描).

Spring的依赖注入(DI).

Set注入:
Spring的相关面试题_第1张图片
构造函数注入:
在这里插入图片描述
复杂对象注入list,set,map,props:


    
        mySet1
        mySet2
        mySet3
    



    
        myStr1
        myStr2
        myStr3
    
    

    
        myList1
        myList2
        myList3
    



    
        propvalue1
        propvalue2
        propvalue3
    




    
        
        
        
    

Bean是如何被管理的?

在Spring框架中一旦把一个bean纳入到SpringIOC容器中,这bean的声明周期就交由容器进行管理.
概括来说主要有四个阶段:实例化,初始化,使用,销毁.

解释一下什么叫AOP(面向切面编程)?

AOP指一种程序设计范型,以切面的语言构造为基础,切面是一种新的模块化机制,用来描述分散在对象类或者方法中的横切关注点.通常,事务、日志、安全性等关注就是应用中的横切关注功能.

如何理解AOP中的概念?

Joinpoint(连接点):程序执行的某个特定位置(程序中所有方法的方法前,方法后,异常等时机都是连接点)。每个方法有多个连接 点
Pointcut(切入点):定位你感兴趣的方法。
Advice(通知/增强):增强逻辑代码.横切逻辑执行的方位信息
切面 = 切点 + 增强.

Spring关于JDK/CGLIB动态代理的选择.

Spring发现涉及带接口的就是用JDK动态代理,如果不涉及接口就使用CGLIB动态代理.

Spring的常用注解:

@Component,@Controller,@Service,@Repository

Springmvc的工作流程

用户发送请求给前端控制器,前端控制器请求查询Handler到处理器映射器,处理接映射器返回处理器执行链给前端控制器,前端控制器请求处理器适配器,处理器适配器请求handler,处理完返回数据到前端控制器,经过视图解析器渲染返回view对象给前端控制器,再经过视图渲染响应给用户.

你怎样定义类的作用域?

当定义一个bean在Spring里,我们还能给这个bean生命一个作用域.它可以通过bean定义中的scope属性来定义.
如,当spring要在需要的时候每次生产一个新的bean实例,bean的scope属性就被指定为prototype.
另一方面,一个bean每次使用的时候必须返回同一个实例,这个bean的scope属性必须设为singleton.
request:每次http请求都会创建一个bean
session:在一个HTTP Session中,一个bean定义对应的一个实例,
缺省的Spring bean 的作用域是Singleton.

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

Spring框架中的单例bean不是线程安全的.

你可以在Spring这种注入一个null和一个空字符串吗?

可以.

你可能感兴趣的:(学习总结)