本周学习的主要内容为工程基础课程跟进和Spring的核心容器、AOP。
一、Spring 核心容器:Bean 的「管家」
Spring 核心容器是框架的「心脏」,负责 Bean 的生命周期管理 和 依赖注入(DI)。
两大核心接口:
BeanFactory:基础容器,延迟加载 Bean(按需创建),适合轻量级场景。
ApplicationContext:扩展接口,预加载单例 Bean,支持国际化、事件机制等企业级功能,常用于 Web 应用(如 AnnotationConfigApplicationContext 基于注解配置)。
Bean 生命周期:
实例化 → 依赖注入 → 初始化(@PostConstruct/init-method)→ 使用 → 销毁(@PreDestroy/destroy-method),可通过 BeanPostProcessor 自定义前后处理逻辑。
作用域与注入方式:
作用域:singleton(默认,单例)、prototype(多例)、request/session(Web 场景)。
注入:构造函数注入(强制依赖)、Setter 注入(可选依赖)、@Autowired 注解注入(按类型匹配,搭配 @Qualifier 按名称匹配)。
二、Spring AOP:横切逻辑的「编织者」
AOP(面向切面编程)通过 分离业务逻辑与横切关注点(如日志、事务、权限),降低代码耦合度。
核心概念:
切面(Aspect):封装横切逻辑的类(需用 @Aspect 标记)。
通知(Advice):横切逻辑的具体形式,包括:
前置(@Before):方法调用前执行(如权限校验)。
环绕(@Around):包裹目标方法,可控制执行流程(如性能监控)。
异常(@AfterThrowing):方法抛异常时执行(如异常日志记录)。
切入点(Pointcut):用 AspectJ 表达式定义匹配规则(如 execution(* com.service..*.*(..)) 匹配服务层所有方法)。
代理机制:
JDK 动态代理:目标对象需实现接口,代理类实现相同接口(默认方式)。
CGLIB 代理:通过继承生成代理类,无需接口(需配置 proxyTargetClass = true)。
典型应用:
日志记录、事务管理(@Transactional 本质是 AOP)、统一异常处理、接口限流等。
三、核心容器与 AOP 的协同
切面类本身是容器中的 Bean(需 @Component 注册),由容器管理生命周期。
AOP 通过容器动态生成代理对象,将切面逻辑「织入」目标方法,调用代理对象时自动执行增强逻辑,对业务代码无侵入。
总结
核心容器通过 DI 解耦组件,用标准化流程管理 Bean,是 Spring 框架的基石。
AOP 以「非侵入式」方式增强功能,让业务代码专注核心逻辑,两者结合使 Spring 成为企业级开发的首选框架。实际开发中,建议优先使用注解(如 @Autowired、@Aspect)简化配置,提升开发效率。