Spring 容器中单例 Bean创建、反射与 AOP 动态代理

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 生成一个代理对象,调用时先执行日志切面,再执行原方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值