"这篇文章除了标题'25个经典的Spring面试问答'外,还提到了Spring框架在面试中的常见问题,涵盖了Spring的核心概念、IoC与DI、BeanFactory与ApplicationContext的区别、Spring配置方式、Bean的生命周期、Bean的范围、集合与Properties注入、注解的使用以及Spring中的设计模式等知识点。作者鼓励读者分享更多Spring面试问题以便汇总学习。"
Spring框架是Java应用程序开发中的一个核心框架,它提供了一个全面的基础设施,支持从数据访问到事务管理的多种服务。其主要模块包括:
1. **Core Container**:包括Core、Beans、Context模块,定义了Spring的基本特性和Bean工厂,实现了控制反转(IOC)和依赖注入(DI)。
2. **Data Access/Integration**:包括JDBC、ORM、OXM、JMS模块,提供了对数据库访问和不同数据源集成的支持。
3. **Web**:包含Web、Web-Servlet、Web-Portlet模块,支持基于Servlet的Web应用开发。
4. **AOP(面向切面编程)**:提供了声明式事务管理和其他横切关注点的实现。
5. **ASPECTJ**:支持使用AspectJ进行类型级别的增强和编译时织入。
6. **Instrumentation**:提供了类加载器工具和支持Java代理的类。
7. **MVC**:Spring Web MVC框架,用于构建Web应用,提供了模型-视图-控制器的设计模式实现。
**控制反转(IOC)**和**依赖注入(DI)**是Spring的核心概念。控制反转意味着组件的创建和组装由容器负责,而不是由组件自己。依赖注入则是实现IOC的一种方式,通过将依赖关系从代码中分离出来,使得组件只需要声明依赖,而由容器在运行时注入。
**BeanFactory**是Spring的基础容器,负责管理Bean的生命周期和依赖关系。**ApplicationContext**在BeanFactory的基础上增加了国际化、事件发布、消息源等功能,更适合企业级应用。
配置Spring应用可以通过XML、Java配置或者注解方式。XML配置是最传统的,Java配置(使用@Configuration和@Bean注解)更符合Java的编程习惯,而注解配置则极大地简化了配置工作。
SpringBean的生命周期包括实例化、初始化、使用和销毁。Bean的范围有Singleton(单例)、Prototype(原型)、Request、Session和GlobalSession等多种,决定了Bean的创建和共享方式。
**Spring的线程安全问题**:Spring中的单例Bean默认不是线程安全的,需要开发者根据实际情况处理并发问题。
集合类如List、Set等可以通过`<list>`、`<set>`标签注入,Properties可以通过`<props>`标签注入。`@Autowired`、`@Qualifier`和`@Required`是用于注解注入的,其中`@Autowired`自动匹配类型,`@Qualifier`指定特定的Bean,`@Required`确保属性被注入。
Spring框架中使用了许多设计模式,例如工厂模式(BeanFactory)、单例模式(Singleton Beans)、装饰者模式(AOP代理)、策略模式(不同数据访问策略)等。
以上只是Spring面试中的一些常见问题和解答,实际面试中可能还会涉及Spring Boot、Spring Security、Spring Cloud等相关话题。