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注入:
在这里插入图片描述
构造函数注入:
在这里插入图片描述
复杂对象注入list,set,map,props:

<property name="myStrs">
    <set>
        <value>mySet1</value>
        <value>mySet2</value>
        <value>mySet3</value>
    </set>
</property>

<property name="myList">
    <array>
        <value>myStr1</value>
        <value>myStr2</value>
        <value>myStr3</value>
    </array>
    </property>
<property name="mySet">
    <list>
        <value>myList1</value>
        <value>myList2</value>
        <value>myList3</value>
    </list>
</property>

<property name="myMap">
    <props>
        <prop key="myProp1">propvalue1</prop>
        <prop key="myProp2">propvalue2</prop>
        <prop key="myProp3">propvalue3</prop>
    </props>

</property>

<property name="myProps">
    <map>
        <entry key="map1" value="mapvalue1"></entry>
        <entry key="map2" value="mapvalue2"></entry>
        <entry key="map3" value="mapvalue3"></entry>
    </map>
</property>

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和一个空字符串吗?

可以.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值