Java面试宝典带你复习--第三章框架篇

在这里插入图片描述

📃个人主页:编程的一拳超人

⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 ——《人民日报》


第三章 框架篇

3.1 Struts1运行原理与核心组件

Struts1是早期MVC框架,基于Servlet API构建,核心流程围绕ActionServletActionForm展开。

3.1.1 核心处理流程
  1. 请求分发
    • 所有请求由ActionServlet(前端控制器)接收,根据struts-config.xml匹配ActionMapping
    <!-- struts-config.xml配置示例 -->  
    <action-mappings>  
        <action path="/login" type="com.example.LoginAction" name="loginForm" scope="request">  
            <forward name="success" path="/success.jsp" />  
        </action>  
    </action-mappings>  
    
  2. 表单验证
    • 使用ActionForm封装请求参数,重写validate()方法进行校验。
    public class LoginForm extends ActionForm {  
        private String username;  
        private String password;  
        // getters/setters  
        public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {  
            ActionErrors errors = new ActionErrors();  
            if (username == null || username.length() < 3) {  
                errors.add("username", new ActionMessage("error.username.required"));  
            }  
            return errors;  
        }  
    }  
    
3.1.2 局限性与演进
  • 线程安全Action为单例,依赖ActionForm线程不安全,需避免实例变量。
  • 与Struts2对比:Struts1依赖ActionForm,而Struts2支持POJO接收参数,更灵活。
3.2 Struts2运行原理与拦截器机制

Struts2基于WebWork重构,核心是拦截器链和OGNL表达式,支持POJO动作类。

3.2.1 拦截器链执行流程
  1. 请求拦截
    • 请求进入StrutsPrepareAndExecuteFilter,触发17个默认拦截器(如paramsvalidation)。
    <!-- struts.xml配置拦截器 -->  
    <package name="default" extends="struts-default">  
        <action name="userAction" class="com.example.UserAction">  
            <interceptor-ref name="defaultStack" />  
            <result name="success">/user.jsp</result>  
        </action>  
    </package>  
    
  2. OGNL表达式
    • 访问请求参数:user.name,支持对象图导航。
    // Action类  
    private User user;  
    public String execute() {  
        System.out.println("用户名:" + user.getName());  
        return SUCCESS;  
    }  
    
3.2.2 最新版本特性
  • Struts 2.6+:支持HTTP/2,优化拦截器性能,增强安全性(防止OGNL注入攻击)。
3.3 Hibernate运行原理与持久化技术

Hibernate是ORM框架,将对象映射到数据库表,核心是会话管理和缓存机制。

3.3.1 核心接口与生命周期
  • 五大核心接口
    1. Configuration:加载配置(hibernate.cfg.xml或注解),创建SessionFactory
    2. SessionFactory:线程安全,创建Session(相当于JDBC的Connection)。
    3. Session:非线程安全,提供get()load()save()等CRUD方法。
    // 注解配置示例  
    @Entity  
    @Table(name = "users")  
    public class User {  
        @Id  
        @GeneratedValue(strategy = GenerationType.IDENTITY)  
        private Long id;  
        private String name;  
    }  
    
3.3.2 缓存机制升级
  • 二级缓存
    • 集成EhcacheHazelcast,配置hibernate.cache.use_second_level_cache=true
    <!-- ehcache.xml配置 -->  
    <cache name="userCache" maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="300" />  
    
  • 查询缓存:缓存Query.list()结果,减少SQL执行。
3.4 Spring核心原理与依赖注入

Spring框架以IOC(控制反转)和AOP(面向切面)为核心,简化企业级开发。

3.4.1 IOC容器与依赖注入
  • 注入方式
    1. 构造器注入:适合必填依赖。
      public class UserService {  
          private final UserRepository userRepository;  
          public UserService(UserRepository userRepository) {  
              this.userRepository = userRepository;  
          }  
      }  
      
    2. @Autowired注解:按类型注入,支持@Qualifier指定Bean。
      @Autowired  
      @Qualifier("mysqlUserRepository")  
      private UserRepository userRepository;  
      
3.4.2 AOP实战与表达式
  • 切点表达式
    • 匹配所有Service类的方法:execution(* com.example.service.*.*(..))
    @Aspect  
    public class LogAspect {  
        @Around("execution(* com.example.service.*.*(..))")  
        public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {  
            long start = System.currentTimeMillis();  
            Object result = joinPoint.proceed();  
            System.out.println("方法执行耗时:" + (System.currentTimeMillis() - start) + "ms");  
            return result;  
        }  
    }  
    
3.4.3 Spring Boot自动配置
  • Starter依赖
    • spring-boot-starter-web自动配置Servlet、SpringMVC、Tomcat。
    • spring-boot-starter-data-jpa自动配置Hibernate和DataSource。
3.5 SpringMVC运行原理与RESTful支持

SpringMVC是Spring的MVC模块,支持RESTful API开发,核心是DispatcherServlet和注解驱动。

3.5.1 请求处理流程
  1. 处理器映射
    • @RequestMapping@GetMapping等注解匹配请求路径。
    @RestController  
    @RequestMapping("/users")  
    public class UserController {  
        @GetMapping("/{id}")  
        public User getUser(@PathVariable Long id) {  
            return userService.getUserById(id);  
        }  
    }  
    
  2. 数据绑定
    • @RequestParam获取查询参数,@RequestBody解析请求体JSON。
3.5.2 响应式支持(Spring 5+)
  • WebFlux
    • 响应式编程模型,支持Reactive Streams,适合高并发场景。
    @GetMapping("/reactive-users")  
    public Flux<User> getReactiveUsers() {  
        return userRepository.findAll();  
    }  
    
3.5.3 性能优化
  • 视图渲染
    • 使用@ResponseBody返回JSON,避免JSP渲染开销。
    • 集成Thymeleaf模板引擎,支持服务端渲染(SSR)。
3.6 框架对比与选型建议
框架优势适用场景最新版本特性
Struts2简单易用,标签库丰富传统Web项目,表单驱动开发2.6.23,增强安全防护
SpringMVC与Spring生态集成,RESTful友好现代Web应用,微服务架构6.0+,支持Kotlin和响应式
Hibernate全自动ORM,简化SQL编写复杂数据模型,JPA标准兼容6.2+,支持Panache Kotlin API
MyBatis灵活控制SQL,性能优异性能敏感项目,SQL优化需求高3.5.10,支持动态SQL和插件

选型建议

  • 新项目优先选择Spring Boot + SpringMVC + MyBatis Plus,兼顾灵活性与开发效率。
  • 复杂ORM场景使用Hibernate JPA,结合Spring Data JPA简化仓储层开发。

通过以上拓展,第三章详细解析了主流Java框架的核心原理、最新特性及实战应用,涵盖Struts、Hibernate、Spring全家桶的深度知识点,结合代码示例和选型建议,适合应对框架相关的面试问题和实际项目开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程的一拳超人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值