一、Spring框架概述
Spring是Java企业级应用开发的核心框架,通过控制反转(IoC)和 面向切面编程(AOP)实现模块解耦,简化开发流程。其核心优势包括依赖注入、声明式事务管理、集成主流ORM框架(如Hibernate、MyBatis)等。
Spring生态全景图:
-
核心模块:IoC容器、AOP、事务管理
-
扩展模块:Spring MVC(Web开发)、Spring Boot(快速开发)、Spring Cloud(微服务)
-
数据层支持:Spring Data(统一数据访问)、Spring Security(安全认证)
二、Spring核心机制
1. 控制反转(IoC)与依赖注入(DI)
-
IoC:将对象创建与管理的控制权交给Spring容器,而非硬编码。
-
DI实现方式:
注入方式 特点 示例代码 构造器注入 强制依赖初始化 new UserService(userRepository)
Setter注入 灵活设置可选依赖 userService.setRepo(repo)
注解注入 简化配置(如@Autowired) @Autowired private UserRepo repo
IoC容器工作流程:
-
加载配置文件(XML/注解)
-
解析Bean定义并注册到容器
-
实例化Bean并注入依赖
-
管理Bean生命周期(初始化/销毁)
2. 面向切面编程(AOP)
AOP核心概念:
-
切面(Aspect):封装横切关注点(如日志、事务)
-
通知(Advice):定义何时执行增强(@Before,@Around)
-
切点(Pointcut):指定哪些方法需要增强
AOP实现方式对比:
方式 | 原理 | 适用场景 |
---|---|---|
JDK动态代理 | 基于接口代理 | 目标类实现接口 |
CGLIB动态代理 | 生成子类代理 | 目标类无接口 |
示例:事务管理通过@Transactional注解实现方法级事务控制。
三、Bean管理与作用域
1. Bean生命周期
-
实例化:通过反射创建对象
-
属性注入:填充依赖(DI)
-
初始化:调用init-method或@PostConstruct
-
使用:通过容器获取Bean
-
销毁:调用destory-method
2. Bean作用域
作用域 | 描述 | 适用场景 |
---|---|---|
Singleton | 单例(默认) | 无状态服务(如工具类) |
Prototype | 每次请求创建新实例 | 有状态对象(如购物车) |
Request | 每个HTTP请求一个实例 | Web应用请求处理 |
Session | 每个用户会话一个实例 | 用户登录信息管理 |
四、Spring注解深度解析
1. 组件扫描与核心注解
Spring通过@Component及其衍生注解实现Bean的自动注册,无需XML配置即可完成对象管理:
-
@Component:通用组件标记,适用于任意层级类
-
分层专用注解:
-
@Controller
:Web层组件(如处理HTTP请求) -
@Service
:业务逻辑层组件 -
@Repository
:数据访问层组件(自动处理数据访问异常)
-
示例配置:
java"><context:component-scan base-package="com.example"/> <!-- 开启组件扫描 -->
2. 依赖注入注解
通过注解实现灵活依赖管理,无需set方法:
-
@Autowired
:按类型自动装配,配合@Qualifier("beanName")
可按名称注入 -
@Resource
:Java原生注解,直接按名称注入(等价于@Autowired + @Qualifier
) -
@Value
:注入配置文件属性(如@Value("${jdbc.url}")
)
代码示例:
java">@Service
public class UserService {@Autowired@Qualifier("userDao")private UserDao dao; // 按类型+名称精确注入@Resource(name = "cacheManager")private CacheManager cache; // 直接按名称注入
}
3. 作用域与生命周期控制
-
@Scope
:定义Bean作用范围(如@Scope("prototype")
多例模式) -
生命周期回调:
-
@PostConstruct
:初始化后执行(替代init-method
) -
@PreDestroy
:销毁前执行
-
五、Spring事务管理
1. 事务传播行为
传播类型 | 描述 |
---|---|
REQUIRED | 当前有事务则加入,否则新建(默认) |
REQUIRES_NEW | 新建事务,挂起当前事务 |
NESTED | 嵌套事务(子事务回滚不影响父事务) |
2. 声明式事务配置
java">@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class
)
public void transferMoney() { ... }
六、Spring MVC与Spring Boot
1. Spring MVC工作流程
-
用户请求 → DispatcherServlet接收
-
HandlerMapping确定目标Controller
-
Controller执行业务逻辑 → 返回ModelAndView
-
ViewResolver解析视图 → 渲染响应
2. Spring Boot核心优势
-
自动配置:根据依赖自动配置组件(如spring-boot-starter-web集成Tomcat)
-
简化部署:内嵌服务器,打包为可执行JAR
-
监控支持:Actuator提供健康检查、性能指标
七、高频面试题精选
-
IoC与DI的区别:IoC是设计思想,DI是实现方式。
-
Bean线程安全吗:不安全的,单例Bean需避免成员变量,推荐使用ThreadLocal。
-
Spring事务失效场景:非public方法、自调用、异常未抛出等。
-
Spring Boot自动配置原理:通过@EnableAutoConfiguratuion扫描META-INF/spring.factories。
翻过这座山,他们就会听到你的故事!
下期预告《面试之Springboot框架》...