Java面试题关于Spring

80 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

Spring相关面试题

第六题:什么是DI?

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


第七题:什么是IOC?

  •         IOC,Inversion of Control,控制反转,指将对象的控制权转移给Spring框架,由 Spring 来负责控制对象的生命周期(比如创建、销毁)和对象间的依赖关系。
  •         对于某个具体的对象而言,以前是由自己控制它所引用对象的生命周期,而在IOC中,所有的对象都被 Spring 控制,控制对象生命周期的不再是引用它的对象,而是Spring容器,由 Spring 容器帮我们创建、查找及注入依赖对象,而引用对象只是被动的接受依赖对象,所以这叫控制反转。

第八题:IoC的原理是什么?

        Spring 的 IoC 的实现原理就是工厂模式加反射机制

第九题:Spring的自动装配有哪几种?

在Spring框架xml配置中共有5种自动装配:

  •         no:默认的方式是不进行自动装配的,通过手工设置ref属性来进行装配bean。
  •         byName:通过bean的名称进行自动装配,如果一个bean的 property 与另一bean 的name 相同,就进行自动装配。
  •         byType:通过参数的数据类型进行自动装配。
  •         constructor:利用构造函数进行装配,并且构造函数的参数通过byType进行装配。
  •         autodetect:自动探测,如果有构造方法,通过 construct的方式自动装配,否则使用 byType的方式自动装配。

基于注解的自动装配方式:

  •         使用@Autowired、@Resource注解来自动装配指定的bean。
  •         容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性。
  •         如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据;
  •         如果查询的结果不止一个,那么@Autowired会根据名称来查找;
  •         如果上述查找的结果为空,那么会抛出异常。解决方法时,使用required=false。

第十题:@Component和@Bean的区别是什么

  •         作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。
  •         @Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中,@Bean注解通常是在标有该注解的方法中定义产生这个bean
  •         @Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。