Spring中的面试题01

面试题

Spring框架中,如果通过组件扫描来创建类的对象

在某个配置类上添加@ComponentScan注解,必要的话,配置这个注解的value / basePackages属性,可以指定组件扫描的根包。

将需要被Spring创建对象的类型,声明在这个根包之下,并且,在类上添加组件注解即可。

常用的基本组件注解有:@Component@Controller@Service@Repository

使用Spring框架时,如何选取@Bean方法和组件扫描,使得Spring创建对象

自定义的类应该使用组件扫描,其它类(不是自行创建的类型)必须使用@Bean方法。

请描述@Autowired的自动装配机制

首先,在Spring容器中查找匹配类型的Spring Bean的数量

  • 0个:取决于@Autowired注解的required属性
    • required = true:加载Spring时出现NoSuchBeanDefinitionException
    • required = false:放弃自动装配,则属性值为null
  • 1个:直接装配,且成功
  • 多个:将尝试根据名称来自动装配,要求被自动装配的属性名与Spring Bean的名称是匹配的,如果存在匹配的,则成功装配,否则,加载Spring时出现NoUniqueBeanDefinitionException
    • 关于名称匹配,可以是属性名改为某个Spring Bean名称,或在属性上添加@Qualifier注解来指定某个Spring Bean的名称

请描述@Autowired@Resource的装配机制的区别

【先回答以上@Autowired的装配机制】

@Resource的装配机制是:先尝试根据名称查找匹配的Spring Bean,且类型也匹配,则自动装配,如果没有匹配名称的Spring Bean,将尝试按照类型来装配,简单来说,是先根据名称,再根据类型的装配机制。

请描述@Autowired@Resource的区别

【先回答以上题目的答案】

@Resourcejavax.annotation包中的注解,而@Autowired是Spring框架定义的注解。

@Resource注解可以添加在类上、属性上、方法上,但是,只有添加在属性上,才被解释为自动装配。

@Autowired注解可以添加在属性上、Setter方法上、构造方法上,所以,当尝试自动装配时,可以:

public class BrandController {
    @Autowired
    private IBrandService brandService;
}
// 本示例代码的效果,使用@Resource无法实现
public class BrandController {
    
    private IBrandService brandService;
    
    @Autowired
    public void setBrandService(IBrandService brandService) {
        this.brandService = brandService;
    }
}
// 本示例代码的效果,使用@Resource无法实现
public class BrandController {
    
    private IBrandService brandService;
    
    @Autowired
    public BrandController(IBrandService brandService) {
        this.brandService = brandService;
    }
}

其实,关于Spring框架自动调用构造方法:

  • 如果类中仅有无参构造方法,则直接调用(不需要使用@Autowired注解)
  • 如果类中仅有1个非无参构造方法,则直接调用(不需要使用@Autowired注解)
  • 如果类中有多个构造方法,则尝试调用无参数构造方法(不需要使用@Autowired注解)
  • 如果类中有多个构造方法,且都是有参数的,则尝试调用带@Autowired的那1个

由于@Autowired可以添加在方法上,如果方法的参数需要被自动装配,但名称不匹配,还可以在方法的参数前添加@Qualifier来指定Spring Bean的名称。

在Spring框架中,IoC与DI的区别

IoCInversion OControl,控制反转,表示将对象的控制权(创建、管理)交给框架

DIDependency Injection,依赖注入,表现为给对象的依赖属性赋值

Spring框架通过DI实现了(完善了)IoC。

Spring MVC的核心处理流程

Spring MVC的核心组件:

  • DispathcerServlet:用于统一接收请求,并分发
  • HandlerMapping:记录了请求路径与处理请求的控制器组件的对应关系
  • Controller:实际请求的组件
  • ModelAndView:封装了数据与视图名称的结果
  • ViewResolver:根据视图名称确定实际应用的视图组件

 

        

使用Mybatis的查询时,如何选取resultType和resultMap

在配置<select>节点时,必须配置resultTyperesultMap,其中,resultType是直接指定返回值的类型,此属性的取值为返回值类型的全限定名,而resultMap的取值为自行配置的<resultMap>节点的id属性的值,而自定义的<resultMap>是用于指导Mybatis如何封装查询结果的。

当抽象方法的返回值类型是基本数据类型(例如统计查询)或其它基本值类型(通常包括String)时,只能使用resultType

当抽象方法的返回值类型是封装的类型时,强烈推荐使用resultMap,因为<resultMap>可能具有一定的复用性,并且,复杂的关联查询只能使用<resultMap>的配置。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值