Spring+Struts+Hibernate面试精华:AOP/IOC、查询方式与线程安全

需积分: 12 5 下载量 20 浏览量 更新于2024-09-18 1 收藏 95KB DOC 举报
本文档是一份针对Struts、Spring和Hibernate技术栈的面试题汇总,涵盖了这几个流行框架的核心概念、实践和常见问题。以下是对每个问题的详细解析: 1. **AOP与IoC在Spring中的应用** - AOP (面向切面编程) 提供了在不修改原有代码的情况下,通过预编译方式和运行期动态织入机制,实现系统结构分离的一种编程范式。Spring利用AOP实现了声明式事务管理,使得业务逻辑与事务处理解耦。 - IoC (Inversion of Control,控制反转) 是一种设计模式,它允许将对象的创建和管理职责从应用程序代码转移到外部容器。Spring通过依赖注入(DI)实现IoC,简化了对象之间的依赖关系,提高模块间的可测试性和灵活性。 2. **Hibernate查询方式** - Hibernate提供了多种查询数据的方式,包括: - HQL (Hibernate Query Language):类似SQL的查询语言,用于编写高度定制化的查询。 - SQL查询:直接使用原生SQL语句进行查询。 - 条件查询:利用 Criteria API 或 Query API 进行更灵活的条件查询。 3. **Struts中的线程安全与Action处理** - Struts Action 不是线程安全的,因为多个请求可能共享同一个Action实例。为了保证线程安全,可以通过以下方式: - 声明局部变量,确保每个请求拥有独立的对象实例。 - 使用Spring的`prototype`作用域,每次请求都会创建新的Action实例。 - 扩展`RequestProcessor`或采用其他方式,如Spring MVC的`@SessionAttributes`注解,确保每个请求处理的Action都是新的。 4. **Struts MVC架构解析** - MVC (Model-View-Controller) 模式中,Struts这样实现: - Model:通常使用JavaBean、EJB组件或POJO(Plain Old Java Object)作为模型层,存储数据和业务逻辑。 - Controller:Action扮演控制器角色,接收用户请求并调用模型和视图进行交互。 - View:由JSP文件及其标签组成,负责展示数据给用户。 5. **Struts关键对象的作用** - Action:控制器,处理HTTP请求并调用业务逻辑。 - ActionForm:用于封装用户提交的表单数据。 - DynaValidatorForm:动态验证的表单,提供更灵活的验证规则。 - ActionMapping:映射器,定义Action与URL之间的关联。 6. **Hibernate的load()与get()方法差异** - `load()`方法假设数据存在并启用延迟加载,如果不存在则在使用时抛出异常。它首先检查缓存,然后是第一级缓存,如果没有再从数据库加载。 - `get()`方法则要求必须获取到实际的数据,即使数据不存在也会返回null,除非设置了缓存策略。它会在第一级缓存找不到时继续查找第二级缓存或数据库。 7. **Hibernate的延迟加载和openSessionInView** - 延迟加载是将对象的加载推迟到真正需要时,这样可以减少不必要的数据库查询,提高性能。但是必须在session有效期内使用,否则无法工作。 - `openSessionInView`模式建议在每个HTTP请求的开始阶段打开Session,保持到响应结束,以支持延迟加载,但需要注意内存消耗和并发问题。 这份文档对Struts、Spring和Hibernate的基础知识进行了全面梳理,对于准备面试或进一步理解这三个框架的开发者来说,是很有价值的学习资料。