Spring面试深度解析:核心技术与实战要点

5星 · 超过95%的资源 需积分: 40 4 下载量 47 浏览量 更新于2024-07-08 2 收藏 774KB PDF 举报
"这份资料包含了高级开发人员在面试过程中可能会遇到的Spring相关面试问题和答案,涵盖Spring核心、AOP、事务管理、设计模式、SPI机制等多个方面。" Spring是Java开发中广泛使用的轻量级框架,它通过控制反转(IoC)和面向切面编程(AOP)来简化应用程序的构建。以下是其中一些关键知识点的详细解释: 1. **ThreadLocal的底层对象**: ThreadLocal是一个线程局部变量,每个线程都有自己的副本,避免了多线程环境下共享数据带来的同步问题。ThreadLocalMap是ThreadLocal的内部类,用于存储线程局部变量,其底层使用的是弱引用,以减少内存泄漏的风险。 2. **@Service和@Repository注解**: 这两个注解通常用于标记业务层和数据访问层的实现类,Spring会自动扫描并管理这些类。由于接口不包含任何实现,所以注解通常放在实现类上。 3. **Spring的三种注入方式**: Spring支持构造器注入、设值注入(setter方法)和接口注入。它们都是IoC的体现,允许Spring容器负责创建对象和管理对象间的依赖关系。 4. **依赖注入的注解@Resource, @Autowired和@Inject**: - `@Resource` 默认按名称注入,可选按类型注入。 - `@Autowired` 默认按类型注入,可以与`@Qualifier`一起使用来指定名称。 - `@Inject` 是JSR-330规范的一部分,功能类似于`@Autowired`,按类型注入。 5. **BeanFactory和ApplicationContext**: BeanFactory是Spring的核心接口,提供基本的bean管理和依赖注入功能。ApplicationContext提供了更多企业级服务,如消息源、国际化支持和AOP。 6. **Spring的IOC理解**: 控制反转(Inversion of Control)是指容器控制对象的创建和装配,而不是对象自身。Spring通过XML配置或注解来管理bean的生命周期和依赖关系。 7. **Bean的生命周期**: 包括实例化、初始化、配置、作用域、销毁等阶段,Spring提供了多种回调方法,如`@PostConstruct`和`@PreDestroy`,以及自定义初始化和销毁方法。 8. **Spring Boot自动装配**: 基于`@EnableAutoConfiguration`注解,Spring Boot会自动根据类路径中的jar包和配置来配置bean。 9. **Spring的缓存**: Spring支持多种缓存技术,如 EhCache、Redis 等,通过`@Cacheable`, `@CacheEvict`等注解实现缓存操作。 10. **循环依赖解决**: Spring使用三级缓存(早绑定、晚绑定、单例池)策略来解决循环依赖问题。 11. **BeanFactory和FactoryBean**: BeanFactory是Spring的bean容器,而FactoryBean是一个特殊类型的bean,它能生产其他bean。 12. **Spring AOP**: AOP用于实现横切关注点,如日志、事务管理。Spring AOP可以通过动态代理(JDK或CGLIB)实现,也可以通过XML或注解配置。 13. **事务管理**: Spring支持编程式和声明式事务管理。`@Transactional`注解用于声明事务边界,事务的传播特性包括七种,如REQUIRED、REQUIRES_NEW等。 14. **Spring事务回滚**: Spring事务的回滚是基于事务的异常规则,当发生未检查异常(继承自RuntimeException的异常)时,事务会自动回滚;对于检查异常,需要在@Transactional注解中明确指定。 15. **抽象类与接口**: 抽象类用于代码复用,可以包含实现;接口定义行为规范,只能包含常量和抽象方法。选择时,若需要多继承则使用接口,否则考虑抽象类。 16. **StringBuilder和StringBuffer**: 两者都用于字符串拼接,StringBuilder是非线程安全的,效率较高;StringBuffer是线程安全的,适合多线程环境。 17. **值传递和引用传递**: Java中只有值传递,但对于对象,实际上是传对象的引用。方法内部对对象的修改会影响到方法外部的对象。 以上只是部分关键知识点的简述,每个话题都涉及更深入的技术细节和最佳实践,值得进一步学习和探讨。