Spring核心知识精讲:IoC容器、Bean作用域生命周期与AOP(第二部分)

Spring Bean 的生命周期与作用域解析及实战 通过本文的讲解和实战应用,我们深入了解了Spring Bean的生命周期和作用域。Bean的生命周期包括实例化、属性赋值、初始化、使用和销毁等阶段,而作用域则决定了Bean实例在IoC容器中的存在范围。合理利用这些概念,可以帮助我们更好地管理和优化Spring应用中的Bean,提高应用的性能和稳定性。在日常开发中,我们还需要注意以下几点:避免在Bean的初始化或销毁方法中执行耗时的操作,以免影响应用的启动和关闭速度。对于单例作用域的Bean,要注意线程安全问题,避免在多线程环境下出现数据不一致的情况。 阅读详情

本文将系统梳理Spring框架的几个核心概念,涵盖ApplicationContext与BeanFactory的区别、Bean的作用域与生命周期、基于注解的IoC/DI,以及AOP的原理与配置,旨在帮助开发者构建扎实的Spring基础。

一、ApplicationContext 与 BeanFactory 的区别

二者都是Spring IoC容器的核心接口,用于管理Bean的生命周期和依赖关系。

  • BeanFactory:IoC容器的顶级接口。它采用了延迟加载策略,即在第一次调用getBean()方法获取对象时,才会实例化该Bean。

  • ApplicationContext:它是BeanFactory的子接口,在继承了其所有功能的基础上,增加了更多企业级特性(如国际化、事件发布等)。其关键区别在于,它采用了预加载(饿汉式)策略,在容器启动、加载配置文件时,就会创建并初始化所有的单例Bean。

简单比喻:BeanFactory是基础版工厂,按需生产;ApplicationContext是增强版工厂,开业前就备好了所有招牌产品,启动更耗时但运行时响应更快。在绝大多数现代Spring应用中,我们直接使用功能更强大的ApplicationContext。

二、Spring Bean 的5个作用域

Spring为Bean定义了多种作用域,以适配不同的使用场景。

  1. 五种核心作用域:

    • singleton​ (默认):在Spring IoC容器中,一个Bean定义只对应一个实例。所有对该Bean的请求都返回同一个共享对象。其本质是容器内部维护的一个Map。

    • prototype:每次请求(调用getBean())时,Spring都会创建一个新的Bean实例。其本质是每次调用newInstance()。

    • request:每次HTTP请求都会创建一个新的Bean,仅适用于Web应用。

    • session:在一个HTTP Session的生命周期内,一个Bean定义对应一个实例,仅适用于Web应用。

    • application:在一个ServletContext的生命周期内,一个Bean定义对应一个实例,仅适用于Web应用。

  2. 如何指定作用域:

    在XML配置中,通过scope属性指定。

    <bean id="myBean" class="com.example.MyBean" scope="prototype"/>

    使用注解时,使用@Scope注解。

    @Component
    @Scope("prototype")
    public class MyPrototypeBean { }
  3. 单例与多例的使用场景:

    • 使用单例(singleton):无状态的、线程安全的对象。例如:各种Service、Dao、工具类、以及所有的工厂类(如SqlSessionFactory)。这是最常用的作用域。

    • 使用多例(prototype):有状态的、非线程安全的对象。例如:数据库连接Connection、MyBatis的SqlSession(旧版)、每次交互需要独立状态的对象。

三、Spring Bean 的生命周期

Bean的生命周期指其从创建到销毁的整个过程,Spring允许我们在特定节点插入自定义逻辑。

  1. 生命周期关键方法示例:

    我们可以通过配置init-method和destroy-method来指定初始化和销毁时调用的方法。

    Bean类定义:

    public class UserServiceImpl {
        public UserServiceImpl() {
            System.out.println("1. 调用构造方法实例化Bean...");
        }
        public void setDependency(...) {
            System.out.println("2. 调用set方法进行依赖注入...");
        }
        public void myInit() {
            System.out.println("3. 调用init-method进行自定义初始化...");
        }
        public void myDestroy() {
            System.out.println("5. 调用destroy-method进行自定义销毁...");
        }
    }

    XML配置:

    <bean id="userService" class="com.hg.UserServiceImpl"
          init-method="myInit" destroy-method="myDestroy"/>
  2. 完整生命周期流程:

    • 对于单例Bean(singleton):

      1. 启动容器​ -> 2. 调用构造方法实例化 -> 3. 调用setter注入依赖 -> 4. 调用init-method​ -> [容器运行中]​ -> 5. 关闭容器​ -> 6. 调用destroy-method

      单例Bean的初始化在容器启动时完成,销毁在容器关闭时进行。

    • 对于多例Bean(prototype):

      1. 调用getBean()​ -> 2. 调用构造方法实例化 -> 3. 调用setter注入依赖 -> 4. 调用init-method​ -> [返回对象给使用者]​ -> 5. JVM垃圾回收​ -> 6. 容器不管理其销毁,destroy-method不会被Spring调用。

      多例Bean的初始化在每次获取时完成,其生命周期由JVM管理,Spring容器不负责销毁。

四、基于注解的 IoC 与 DI

注解极大地简化了Spring的配置。

  1. 配置步骤:

    • 步骤1:在配置文件中启用组件扫描。

      <context:component-scan base-package="com.hg"/>
    • 步骤2 (IoC):在类上使用组件注解,将其声明为Spring Bean。

      @Repository // 等价于<bean id="userDaoImpl" class="...">
      public class UserDaoImpl implements UserDao { }
    • 步骤3 (DI):在需要依赖的字段/方法上使用自动装配注解。

      @Service
      public class UserServiceImpl implements UserService {
          @Autowired // 按类型自动查找并注入UserDao的Bean
          // @Resource(name="userDaoImpl") // 也可按名称注入
          private UserDao userDao;
      }
  2. 常用注解:

    • IoC (Bean声明):

      • @Repository:标注数据访问层​ (DAO) 组件。

      • @Service:标注业务逻辑层​ (Service) 组件。

      • @Controller:标注控制层​ (Web Controller) 组件。

      • @Component:标注不属于以上三层的通用组件。

      • @Scope:指定Bean的作用域,如 @Scope("prototype")。

    • DI (依赖注入):

      • @Autowired:Spring提供,默认按类型(byType)注入。可配合@Qualifier指定名称。

      • @Resource:JSR-250规范,默认按名称(byName)注入。name属性指定Bean id。

      • @Value:注入普通值(基本类型、String)或SpEL表达式,常用于注入配置文件属性。

五、AOP (面向切面编程)
  1. 为什么需要AOP?

    考虑为所有Service方法添加日志记录。若不使用AOP,需要在每个方法中手动添加日志代码,导致代码冗余、维护困难、核心业务逻辑不清晰。

    public class Service {
        public void add() {
            System.out.println("方法开始:" + new Date()); // 重复的日志代码
            // ... 核心业务逻辑 ...
            System.out.println("方法结束:" + new Date()); // 重复的日志代码
        }
        // 其他每个方法都需要写一遍日志
    }

    AOP的目标就是将此类横切关注点(日志、事务、安全等)从业务逻辑中剥离出来。

  2. 什么是AOP?

    AOP (Aspect Oriented Programming)​ 面向切面编程:一种编程范式,允许将程序中重复的代码(横切关注点)抽取出来,形成独立的“切面”,然后通过动态代理技术,在不修改源代码的前提下,将切面逻辑织入到目标方法中,从而对程序功能进行增强。

  3. AOP的核心概念

    • 连接点 (Joinpoint):程序执行过程中明确的点,如方法调用、异常抛出。在Spring AOP中,通常指方法的执行。

    • 切点 (Pointcut):一个表达式,用于匹配一个或多个连接点(即,哪些方法需要被增强)。例如:execution(* com.hg.service.*.*(..))。

    • 增强/通知 (Advice):在切点处执行的具体逻辑(即,要“搞”的事情,如打印日志)。它定义了增强的时机(前置、后置等)和行为。

    • 切面 (Aspect):增强和切点的结合。它定义了“在何处(切点)”执行“何种增强(通知)”。

  4. 五种通知类型及其执行顺序:

    try {
        // 1. 前置通知 (@Before)
        // ... 执行目标方法 (Joinpoint) ...
        // 2. 后置/返回通知 (@AfterReturning) - 方法正常返回后执行
    } catch (Exception e) {
        // 3. 异常通知 (@AfterThrowing) - 方法抛出异常后执行
    } finally {
        // 4. 最终通知 (@After) - 类似于finally块,无论如何都执行
    }
    // 5. 环绕通知 (@Around) - 能控制目标方法是否执行,最强大。
  5. 基于XML的AOP配置

    <!-- 1. 定义增强(通知)Bean -->
    <bean id="logAdvice" class="com.hg.advice.LogAdvice"/>
    
    <!-- 2. 配置AOP -->
    <aop:config>
        <!-- 2.1 定义切点表达式 -->
        <aop:pointcut id="servicePointcut"
                      expression="execution(* com.hg.service.*.*(..))"/>
        <!-- 2.2 定义切面 -->
        <aop:aspect ref="logAdvice">
            <!-- 将增强应用到切点 -->
            <aop:before method="beforeLog" pointcut-ref="servicePointcut"/>
        </aop:aspect>
    </aop:config>
  6. 基于注解的AOP配置

    @Aspect  // 1. 声明这是一个切面类
    @Component // 2. 让Spring管理它
    public class LogAdvice {
        // 3. 定义切面:在何处执行何种增强
        @Before("execution(* com.hg.service.*.*(..))") // 切点表达式直接写在注解里
        public void beforeLog() {
            System.out.println("前置通知: " + new Date());
        }
    }

    在Spring配置文件中开启注解AOP支持:

    <aop:aspectj-autoproxy/>
  7. 切点表达式 (Pointcut Expression)

    格式:execution([修饰符] 返回值类型 包名.类名.方法名(参数))

    • *代表通配符。

    • ..代表当前包及其子包,或代表任意参数。

    • 示例:

      • execution(* com.hg.service.UserServiceImpl.addUser(..)):匹配UserServiceImpl的addUser方法。

      • execution(* com.hg.service.UserServiceImpl.*(..)):匹配UserServiceImpl的所有方法。

      • execution(* com.hg.service.*.*(..)):匹配com.hg.service包下所有类的所有方法(最常用)。


总结:本文从容器基础(BeanFactory/ApplicationContext)、Bean管理(作用域、生命周期)、便捷开发(注解IoC/DI)到核心思想(AOP)系统回顾了Spring框架的基石。理解这些概念是掌握Spring生态和进行高效Java企业开发的关键。

Spring容器与Bean:Spring IoC的核心与运作原理! 🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 阅读详情

相关推荐

宝塔部署若依前端出现502解决方法

若依系统是一个基于Java语言的开源项目,旨在帮助开发者减少开发时间,特别适用于需要快速开发出一套具有用户管理、菜单管理、权限管理、定时任务、日志管理等功能的简单系统。系统分为前后端分离、分布式等架构前后端分离部署教程然而通过宝塔来部署若依系统会遇见一些问题,特此在这里记录一下。

m0_74823683的博客 776

Spring核心原理详解:IOC、DI与AOP的实现机制

本文深入解析了Spring框架的核心原理,包括控制反转(IOC)、依赖注入(DI)和面向切面编程(AOP)。IOC通过BeanFactory和ApplicationContext实现组件管理权的反转;DI采用构造器、Setter和字段三种注入方式,通过三级缓存解决循环依赖;AOP基于动态代理技术实现横切关注点的模块化。文章详细阐述了Spring容器的初始化流程、Bean生命周期管理以及自动装配机制,揭示了Spring框架高效管理对象依赖和增强功能的技术内幕。

cx1050306424的博客 3885

保姆级教程:在CentOS 8上用libvirt + QEMU/KVM搭建ARM64虚拟机(含UEFI配置与常见坑点)

本文提供在CentOS 8上使用libvirt + QEMU/KVM搭建ARM64虚拟机的详细教程,涵盖UEFI配置与常见问题解决方案。通过环境准备、特殊配置要点、UEFI固件安装等步骤,帮助用户在x86架构服务器上高效运行ARM64虚拟化环境,特别适合开发测试与跨平台应用场景。

weixin_30292745的博客 129

深入剖析Spring框架核心源码:从IoC容器到AOP实现原理

通过对Spring核心源码的剖析,我们不仅能解决日常开发中遇到的疑难杂症(如Bean不生效、事务不回滚等),更能深刻理解其背后“约定优于配置”、“通过扩展点开放”等优秀设计哲学。理解设计模式: 在Spring源码中,工厂模式、模板方法、单例、代理、责任链等模式无处不在,是学习设计模式的绝佳范本。善用扩展点: 理解等扩展点,是进行Spring高级定制和二次开发的基础。关注最新动态。

ql191035的博客 1678

电力远动入门:手把手解析IEC 60870-5-101规约的帧结构与报文交互(基于DL/T634.5101-2002)

本文深入解析IEC 60870-5-101规约的帧结构与报文交互,适用于电力远动通信系统。通过详细讲解规约的基础架构、控制域位定义及典型报文交互流程,帮助工程师快速掌握101规约的核心技术,提升电力自动化系统的调试与维护能力。

weixin_27076351的博客 244

矿卡CMP 170HX的AI推理性能优化实战

GPU计算在现代AI推理中扮演着核心角色,其并行计算架构特别适合处理神经网络的大规模矩阵运算。通过CUDA指令集优化和计算管线重构,可以显著提升硬件利用率,这在边缘计算和带宽敏感型任务中尤为重要。以NVIDIA CMP 170HX矿卡为例,通过禁用FMA指令和框架适配优化,其FP32性能可提升15.9倍,在Qwen2.5-1.5B模型的4-bit量化推理中达到A100同架构78%的解码速度。这种优化技术不仅让淘汰矿卡重获新生,更为边缘AI部署提供了高性价比解决方案,特别适合7B以下量化模型部署和多路视频分析

weixin_30432579的博客 624

Spring框架深度解析:从IOC容器到AOP

IOC(InversionofControl,控制反转)是Spring框架的核心。它是一种设计思想,将传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。相较于传统的程序设计中,我们通常是在某个对象中主动创建另一个对象,控制权在自己手上。而在IOC中,创建对象的控制权被反转了,转到了Spring框架,当我们需要某个对象时从容器池中进行注入即可。举例说明://数据库连接逻辑//主动创建依赖对象。

2303_76892351的博客 2755

从DBC到ARXML:用RTA-CAR7实现车载通信协议栈自动化生成全流程

本文详细介绍了如何利用ETAS RTA-CAR7工具链,特别是ISOLAR-A和RTA-BSW ConfGen,实现从车载通信DBC文件到AUTOSAR ARXML系统描述文件,再到基础软件(BSW)协议栈代码的自动化生成全流程。该流程通过深度配置、信号路由、PDU复用及规则定制,大幅提升开发效率与一致性,是应对现代汽车电子复杂网络开发的关键实践。

brandy的博客 220

【Spring】原理解析:Bean的作用域与生命周期

本文将围绕 Spring Bean 的作用域与生命周期展开深度剖析,系统梳理作用域的类型与应用场景、生命周期的关键阶段与扩展点,并结合实际案例揭示其底层实现原理,为开发者提供从理论到实践的完整指导。

2301_81073317的博客 2576

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2845

免费教你快速学会分析运算放大器电路(保证学会)

本文旨在学习如何快速简单地对运算放大器进行分析

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 1万+

Spring框架详解:IoC容器、依赖注入和Bean生命周期

Spring框架通过其核心特性IoC和DI,彻底改变了Java应用的开发方式。它提供了一种松耦合、易测试的方式来构建应用程序。通过深入理解Bean的生命周期、依赖注入的方式以及Spring的配置选项,开发者可以更好地利用Spring框架来创建健壮、可维护的应用程序。随着Spring生态系统的不断发展,如Spring Boot的引入,使得开发Spring应用变得更加简单和快速。

随喜 1720

lammps后处理:ovito选择原子高级技巧讲解

大家好,我是小马老师。 本文介绍如何在ovito中使用公式(Expression)选择需要的原子。 用ovito查看lammps模拟结果时,可能会遇到选择特定原子的情况,比如选择坐标位于一定范围内的原子,或者选择结构为fcc的原子等等。 这时候,就需要用到expression selection功能。 Expression selection功能比较强大,下面分别介绍几种选择原子的方法。 在输入公式前,先点击“Add modification”->"Expression selection"选项,在B

lammps_jiayou的博客 2万+

Spring IoC容器与Bean管理

Spring核心知识点全总结一.Spring IoC容器与Bean管理1.Spring快速入门IoC控制反转DI依赖注入 从本节开始,我将要学习作为java高级阶段最最最最重要的一个框架体系,名为Spring。Spring是整个Java生态中最重要的一环。这篇博客是我一边学习Spring一边总结后的产物,但也并不完全是纯知识点总结,里面也有一套完整的案例与之结合。方便自己以后复习,同时也希望大家看了也能有收获。 一.Spring IoC容器与Bean管理 这一小节,要学习Spring入门、Spring X

weixin_50216991的博客 2282

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring 框架的核心基础:IoC 和 AOP

IoC(Inversion of Control,控制反转),就是把对象创建和依赖关系的管理交给 Spring 容器,而不是由程序员手动去创建对象和管理依赖。IoC 以前是我们想要什么就自己创建什么,现在是我们需要什么容器就帮我们送来什么。IoC 是一种思想,DI 是实现 IoC 的具体方式,将一个对象所依赖的其他对象以参数的形式传入,由外部容器(如 Spring)来“注入”依赖,而不是对象自己创建。打个比方,你现在想吃炒菜和饭,点个外卖这时候就有人把炒好的菜和煮好的饭送到你手上。

m0_73748193的博客 1646

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring IoC容器核心技术:Bean生命周期与依赖注入详解

本文深入解析Spring框架中BeanFactory与ApplicationContext容器的核心差异、Bean的定义、实例化与初始化过程、三种依赖注入方式的实现原理,以及Bean作用域与生命周期回调机制。通过详细的代码示例和架构分析,帮助开发者全面掌握Spring IoC容器的核心技术,构建高效、可维护的企业级应用。 ## BeanFactory与ApplicationContext容器对...

gitblog_07027的博客 1208

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spring boot 中的IOC容器对Bean的管理

Spring Boot 中 IOC 容器对 Bean 的管理,涵盖从容器启动到 Bean 的生命周期管理的全流程。掌握这些步骤后,可以高效利用 Spring Boot 的 IOC 容器管理 Bean,构建松耦合、可维护的应用。容器负责将依赖的 Bean 注入到需要它们的对象中。通过注解或接口控制 Bean 的初始化和销毁逻辑。Spring Boot 的 IOC 容器基于。通过条件注解控制 Bean 的注册。注解指定 Bean 的作用域。,在应用启动时自动初始化。注解标记主类,启动容器。

FAQEW的博客 2542

Spring核心机制:IOC与AOP深度解析

Spring核心机制:IOC与AOP深度解析

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1787

Spring 核心原理全解析:IOC、DI、Bean 生命周期与 AOP

Spring是一个以IOC容器为核心、AOP为重要支撑的企业级开发框架,主要解决对象管理、依赖注入和横切逻辑三大问题。IOC容器通过控制反转将对象创建和管理权交给框架,DI实现依赖关系的自动装配。Bean的生命周期包括注册BeanDefinition、实例化、依赖注入、Aware回调、BeanPostProcessor处理、初始化和放入单例池等步骤。AOP通过代理机制实现无侵入的横切逻辑织入。理解IOC/DI、Bean生命周期、AOP和循环依赖等核心机制,是掌握Spring框架的关键。

写代码写久了才发现:人生和程序一样,经常 Bug 多、需求乱,重构难,但总能跑起来。这个博客记录我从迷茫到搞懂、从踩坑到归纳、从混乱到清晰的过程。写给过去迷茫的自己,也写给同样在路上折腾的你。没有炫技,没有玄学,只有真实的思考、实践和成长。 712

Spring ——Bean(IOC)容器

spring framework——Bean容器 为什么需要Bean容器? 一般的项目搭建,都需要将各层进行分离以降低代码之间的耦合度。比如我们常用Dao层(数据访问层)、service层来封装和数据库的交互部分,其中Dao层负责具体的增删查改,service层负责调用Dao层的方法来对外提供服务。例如: 使用这种方法调用数据库,相当于将对象放到了方法中,此时对象对应的变量(局部变量)随着栈帧的创建而出现,随着栈帧的退出而销毁。那么由于没有引用指向它,该对象就会很快变成可回收状态。如果对象的创建初始化较为

长不大的大灰狼 2459

Java Spring 框架精讲:IoC 与 AOP 深度解析

Java Spring 框架精讲:IoC 与 AOP 深度解析

异常君的博客 1317

Spring Framework IoC Bean生命周期

Spring是一款主流的 Java EE 开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从 简单性、可测试性的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能 外,还提供整合其他技术和框架的能力。自2004年4月,Spring1.0 版正式发布以来,Spring已经步入到了第6个大版本,即 Spring6,本课程 采用 Spring5.3.24 正式版本。在Spring框架规范中,所有由spring管理的对象都称之为Bean对象。

qq_20770569的博客 1340

Spring框架探秘:IoC、AOP与事务管理的核心原理

摘要: Spring是一个分层的JavaEE生态系统,提供一站式解决方案,包含IoC容器、AOP、事务管理等核心技术及MVC、Data、Security等模块。IoC通过依赖注入(推荐构造器注入)实现控制反转,Bean生命周期含初始化/销毁回调。AOP通过切面管理横切关注点(如事务注解@Transactional)。配置方式从XML演进为JavaConfig与注解驱动,SpringBoot通过自动配置简化开发。最佳实践包括避免循环依赖、延迟加载,测试时使用@MockBean。趋势涵盖响应式编程(WebFlu

豆豆的博客 1498

IOC中Bean的生命周期

Spring是一个轻量级开发框架,其核心思想是Ioc(控制反转)以及AOP(面向切面编程),为java应用开发提供组件管理服务,用于组件之间的解耦,以及简化第三方Javaee中间件技术的使用,是是一个基础架构型的开发框架。

2301_78487412的博客 1548

Spring IOC容器启动流程(Bean生命周期)

传统方式:顾客(调用者)直接向厨师(被依赖对象)点餐,需要自己知道厨师是谁、如何联系厨师。 IoC方式:顾客只需告诉服务员(IOC容器)"我要一份牛排",服务员会自动安排厨师做好并送到桌前。顾客不需要关心厨师是谁、如何制作。

m0_60697978的博客 1031

Spring IOC 与 AOP 核心原理深度解析

Spring IOC 与 AOP 核心原理深度解析

u011265143的专栏 1308
上一篇: Spring核心之IOC与DI:手写工厂到Spring容器演进(第一部分)
下一篇: Spring整合MyBatis与事务管理详解(第三部分)
StackNoOverflow
博客等级 码龄1年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值