Spring 面试题

# Spring 面试题

  1. 请解释什么是 Spring Framework,它的主要功能和优点是什么?

  2. Spring Framework 的核心模块是什么?简要描述每个模块的作用。

  3. 什么是依赖注入(Dependency Injection)?Spring 是如何实现依赖注入的?

  4. 解释一下控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)之间的关系。

  5. 为什么使用 Spring Framework?举例说明在实际项目中如何受益于 Spring。

  6. 什么是 IoC 容器?Spring IoC 容器的作用是什么?

  7. Spring IoC 容器中 Bean 的生命周期是怎样的?可以自定义 Bean 的生命周期吗?

  8. 解释一下 Spring BeanFactory 和 ApplicationContext 之间的区别。

  9. 在 Spring IoC 容器中如何配置 Bean?可以使用哪些方式进行 Bean 的定义和注册?

  10. 如何从 Spring IoC 容器中获取 Bean?可以使用哪些方式获取 Bean 的引用?

  11. Spring 中的 Bean 是什么?Bean 的定义有哪些方式?

  12. 解释一下 Spring 中的 Bean 的作用域(Scope)有哪些?它们之间有何区别?

  13. 什么是自动装配(Autowiring)?Spring 中有哪些自动装配的方式?

  14. Spring 中的 @Autowired 和 @Qualifier 注解有什么作用?它们之间的区别是什么?

  15. @Autowired 和 @Resource 有什么区别?

    @Resource和@Autowired都是做bean的注入时使用,@Resource的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

    两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

    @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

    @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。(通过类型匹配找到多个candidate,在没有@Qualifier、@Primary注解的情况下,会使用对象名作为最后的fallback匹配)

    @Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

  16. 什么是延迟初始化(Lazy Initialization)?如何在 Spring 中实现延迟初始化 Bean?

  17. 什么是 AOP(Aspect-Oriented Programming)?它的主要目的是什么?

  18. Spring AOP 的实现原理是什么?它是基于代理(Proxy)还是基于字节码增强(Bytecode Manipulation)?

  19. 在 Spring 中如何创建切面(Aspect)?可以使用哪些方式声明切面?

  20. 解释一下在 Spring AOP 中的通知(Advice)类型有哪些?它们分别在何时执行?

  21. 如何在 Spring 中使用 AOP 来解决常见的横切关注点,例如日志记录和事务管理?

  22. spring 如何处理循环依赖? (opens new window)

    1. 什么是循环依赖?
    2. 什么情况下循环依赖可以被处理?
    3. Spring是如何解决的循环依赖?
  23. spring 的初始化流程?

最后一次更新时间: 3/2/2024, 6:28:17 PM