Spring面试深度解析:25个必知必会问题

需积分: 13 7 下载量 80 浏览量 更新于2024-07-17 1 收藏 544KB PDF 举报
"这篇资源包含了25个与Spring框架相关的经典面试问题,涵盖了Spring的核心概念、配置方式、Bean管理、生命周期、注入机制、资源处理等多个方面。作者旨在帮助面试者准备Spring面试,同时也提供了一个复习Spring知识的清单。" 1. Spring框架是一个全面的后端开发解决方案,它为Java应用程序提供了包括但不限于依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、Web服务等在内的多种功能。Spring的主要模块包括核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web、AOP、工具(Tools)以及测试模块。 2. 使用Spring框架的好处主要包括:简化Java企业级应用的复杂性,通过IOC和DI实现松耦合,支持声明式事务管理,提供AOP用于代码的模块化,以及与多种持久层框架(如Hibernate、JPA)的良好集成。 3. 控制反转(IOC)是指应用程序的控制权由传统的方式(如new关键字创建对象)转移到框架手中,由框架负责对象的创建和管理。依赖注入(DI)是IOC的一种实现方式,即对象之间的依赖关系不是硬编码在对象内部,而是由外部容器在运行时注入。 4. Spring中的IOC意味着不再由类自身负责创建和管理依赖的对象,而是由Spring容器来管理和控制对象的生命周期,创建和维护对象间的依赖关系。 5. BeanFactory是Spring中最基本的容器,它可以加载配置并管理Bean。ApplicationContext是BeanFactory的扩展,提供了更多的企业级功能,如消息源、国际化支持和AOP代理。 6. 配置Spring应用主要有两种方法:基于XML的配置和基于Java的配置。XML配置通过Spring的配置文件定义Bean及其依赖关系;Java配置则使用@Configuration注解的类来定义Bean。 7. 基于XML的配置是Spring早期常用的配置方式,通过XML文件定义Bean的属性和依赖关系。 8. 基于Java的配置使用@Configuration和@Bean注解,使得配置更符合Java编程风格,更易于理解和维护,同时也支持更强大的元数据表达。 9. 注解配置允许开发者使用如@Component、@Service、@Repository和@Controller等注解在类上声明Bean,以及使用@Autowired、@Qualifier等注解进行依赖注入。 10. SpringBean的生命周期包括初始化、活跃期和销毁三个阶段。可以使用init-method和destroy-method属性指定初始化和销毁方法,或实现InitializingBean和DisposableBean接口。 11. Spring中的Bean范围包括singleton(单例)、prototype(原型)、session(会话)和request(请求)四种,分别对应不同的实例化策略。 12. 嵌入beans是指在Bean的定义中嵌套其他Bean的定义,以实现更复杂的依赖关系。 13. Spring框架中的单例bean默认不是线程安全的,因为它们在应用启动时创建,所有请求都共享同一个实例,因此在多线程环境下需要注意同步问题。 14. 注入Java集合类可以通过集合类型的属性,并在XML配置中使用list、set、map等元素,或在Java配置中使用List、Set、Map等类型字段。 15. 注入Properties可以通过XML配置的property元素,或在Java配置中使用Properties类型字段。 16. Spring自动生成Bean的过程涉及到BeanDefinition的创建、解析和注册,以及Bean实例化和依赖注入。 17. 自动化Bean生成的区别主要在于基于XML和基于注解的不同方式,XML需要显式配置,而注解则更加简洁和自动化。 18. 开启基于注解的自动装配通常通过在配置中启用@ComponentScan或@EnableAspectJAutoProxy注解实现。 19. @Required注解表示该字段必须通过构造器或setter方法注入,否则配置无效。 20. @Autowired注解用于自动注入依赖,可以作用于字段、方法和参数,Spring会根据类型或名称自动匹配。 21. @Qualifier注解用于在@Autowired注入时指定具体的Bean,当有多个相同类型的Bean时,避免注入冲突。 22. 构造器注入和setter方法注入的主要区别在于初始化时机和强制性:构造器注入在对象创建时就注入,且如果存在必填依赖,不提供构造器注入会导致无法实例化;setter注入可以在对象创建后任何时候注入,且不提供setter不会阻止对象创建。 23. Spring框架中的事件(Event)主要有ApplicationEvent和ApplicationListener,用于在应用上下文内传播自定义事件。 24. FileSystemResource和ClassPathResource都是Spring的资源抽象,前者用于读取文件系统中的资源,后者用于读取类路径(classpath)下的资源。 25. Spring框架中使用的设计模式包括工厂模式(BeanFactory)、单例模式(Singleton Beans)、代理模式(AOP代理)、装饰器模式(Bean后处理器)等,这些模式使得Spring具有高度灵活性和可扩展性。