1. Spring 普通单例 Bean 的创建
Spring 容器中默认的 Bean 是单例作用域(Singleton)。这些Bean它们的创建过程主要通过 Java 反射机制,调用构造函数实例化对象。这些 Bean 本身是“普通对象”,没有动态代理参与。
创建完成后,Spring 会进行依赖注入和生命周期管理,将 Bean 放入单例缓存。
2. Spring AOP 增强 Bean 的创建
某些特殊功能(如 日志记录、事务管理、JWT 认证等)需要对业务 Bean 进行功能增强。Spring AOP 通过动态代理技术(JDK 动态代理或 CGLIB 字节码增强)创建增强后的代理对象。代理对象包装了原始 Bean,拦截方法调用,插入增强逻辑(比如日志打印、权限校验等)。
这些增强后的 Bean 也是单例,但它们不是普通对象,而是代理对象。
3. 总结对比
| 类型 | 创建方式 | 是否动态代理 | 用途 |
|---|---|---|---|
| 普通单例 Bean | 反射构造实例 | 否 | 业务逻辑 |
| AOP 增强的单例 Bean | 反射构造 + 代理 | 是 | 日志、事务、认证等增强 |
4. 举例说明
-
普通 Bean
@Service public class UserService { public void doSomething() { ... } } -
日志增强的 Bean
@Aspect @Component public class LoggingAspect { @Before("execution(* com.example..*(..))") public void log() { System.out.println("方法执行前日志"); } }
Spring 会为 UserService 生成一个代理对象,调用时先执行日志切面,再执行原方法。
169

被折叠的 条评论
为什么被折叠?



