网站建设进度控制,wordpress新建php页面模板,海南网站建设公司哪家好,石家庄招标信息网1. Spring 核心概念1.1 如何理解 Spring DI#xff1f;DI#xff08;依赖注入#xff09; 是 IoC#xff08;控制反转#xff09; 的具体实现方式#xff0c;由 Spring 容器在运行时通过以下方式自动注入依赖#xff1a;构造器注入#xff08;推荐#xff09;Setter 注…1. Spring 核心概念1.1 如何理解 Spring DIDI依赖注入 是 IoC控制反转 的具体实现方式由 Spring 容器在运行时通过以下方式自动注入依赖构造器注入推荐Setter 注入字段注入不推荐因测试困难
开发者无需手动 new 依赖对象降低耦合度。1.2 基于注解配置作用域与延迟加载注解作用域示例描述ScopeScope(singleton)默认单例模式全局唯一实例Scope(prototype)每次请求创建新实例Scope(valuerequest)每个 HTTP 请求一个实例Web 环境LazyLazy(true)延迟初始化首次使用时创建 Bean示例代码
Component
Scope(prototype)
Lazy
public class MyBean { }
1.3 BeanFactory vs ApplicationContext特性BeanFactoryApplicationContext加载时机懒加载调用 getBean() 时预加载容器启动时初始化所有单例 Bean高级功能无支持国际化、事件传播、AOP 等适用场景资源受限环境如移动设备企业级应用99% 场景使用
1.4 Spring Bean 生命周期实例化通过反射创建 Bean 实例。属性赋值DI 注入依赖。初始化调用 PostConstruct 方法实现 InitializingBean 的 afterPropertiesSet()使用容器中的 Bean 被调用。销毁调用 PreDestroy 方法实现 DisposableBean 的 destroy()
1.5 Bean 作用域对比作用域描述适用场景singleton默认作用域容器内唯一实例无状态服务如工具类、DAOprototype每次请求创建新实例有状态对象如用户会话request每个 HTTP 请求一个实例Web 环境表单数据、请求级缓存session每个 HTTP Session 一个实例用户登录状态、购物车application整个 Web 应用共享一个实例ServletContext全局配置、缓存
1.6 设计模式应用模式示例工厂模式BeanFactory 创建 Bean 实例单例模式默认作用域 singleton代理模式AOP 动态代理JDK/CGLIB观察者模式事件监听ApplicationListener模板方法模式JdbcTemplate、RestTemplate
1.7 Controller 并发安全无状态设计避免定义成员变量。线程安全所有数据通过方法参数或局部变量传递。示例
RestController
public class SafeController {// 正确无成员变量GetMapping(/test)public String test(RequestParam String param) {return Result: param;}
}
2. Spring MVC2.1 处理流程DispatcherServlet 接收请求。HandlerMapping 根据 RequestMapping 匹配 Controller。HandlerAdapter 调用 Controller 方法。Controller 返回 ModelAndView 或 JSONResponseBody。ViewResolver 解析视图如 JSP、Thymeleaf。渲染视图 并返回响应。
2.2 与 AJAX 交互后端使用 RestController ResponseBody 返回 JSON。前端AJAX 请求示例jQuery
$.get(/api/user/1, function(data) {console.log(data.name);
});
2.3 与 Struts2 对比特性Spring MVCStruts2控制器单例线程安全多例每个请求一个 Action配置注解驱动零 XML基于 XML 和 OGNL性能更高无拦截器栈较低复杂 OGNL 解析生态与 Spring Boot 无缝集成社区已停滞
3. Spring 事务管理3.1 两种方式对比方式优点缺点声明式零侵入Transactional学习 AOP 和配置复杂编程式精确控制TransactionTemplate代码冗余、维护困难
3.2 优势传播行为支持 REQUIRED、REQUIRES_NEW 等 7 种策略。隔离级别READ_COMMITTED、SERIALIZABLE 等。多技术兼容统一 JDBC、JPA、Hibernate 事务。测试支持测试时自动回滚Rollback。
4. MyBatis4.1 动态 SQL 解决的问题SQL 注入#{} 预编译参数如 #{id}。代码冗余if、choose 等标签动态拼接 SQL。复杂查询foreach 处理 IN 语句。示例
select idfindUser resultTypeUserSELECT * FROM userwhereif testname ! nullAND name #{name}/if/where
/select
4.2 缓存机制类型范围生命周期配置方式一级缓存SqlSession同一会话内有效默认开启无需配置二级缓存Mapper跨 SqlSession需手动开启cache/ 或注解 CacheNamespace
4.3 接口绑定原理通过 JDK 动态代理为 Mapper 接口生成实现类。好处SQL 与 Java 代码分离XML 或注解。无需手动实现 DAO如 JDBC 模板。支持动态 SQL 和结果映射。
4.4 JDBC 不足与 MyBatis 解决JDBC 问题MyBatis 解决方案冗余代码封装模板SqlSessionTemplate手动事务管理集成 Spring 声明式事务无连接池集成 HikariCP、Druid手动 ORM自动结果映射Results
4.5 优缺点优点缺点SQL 可控性强需手写 SQL轻量级无过度封装二级缓存配置复杂性能优化友好如延迟加载XML 配置繁琐可用注解
5. Shiro 权限管理5.1 认证与授权流程认证Subject.login() 提交凭证如用户名/密码。Realm.doGetAuthenticationInfo() 验证身份。成功后将用户信息存入 Session。授权Realm.doGetAuthorizationInfo() 加载角色和权限。通过注解 RequiresRoles(admin) 或标签 shiro:hasPermission 校验权限。
6. 其他常见问题6.1 Bean 工厂底层机制反射通过 Class.forName() 实例化 Bean。工厂模式BeanFactory 管理对象生命周期。动态代理AOP 生成代理对象JDK/CGLIB。资源释放调用 DisposableBean.destroy() 或 PreDestroy 避免内存泄漏。
6.2 内存泄漏定义已分配内存无法被 GC 回收如未关闭的 Connection、ThreadLocal 未清理。预防使用 try-with-resources、Spring 的 DisposableBean