Spring

Spring 源码之 SpringProperties 类简介 SpringProperties 是 Spring core 包中一个用于读取并加载Spring库级别属性的工具类,其读取的文件为classpath下的spring.properties文件。内部通过一个Properties对象维护读取到的属性,并对外暴露一些设置属性值或者获取属性值的的静态方法。在根据key获取属性值时,如果localProperties不存在,则从VM系统属性中获取。 阅读详情

一:为什么出现三大框架?

 

Struts:以前写项目,可以用jsp+servlet做,但是servlet中的代码复杂,且包含大量的jdbc的语句,为了便于以后的维护,出现struts框架,分层结构更加清晰,各层做各层应该做的事情,表现层,业务逻辑层,数据访问层,持久化层;

 

Hibernate:为了解决对象模型跟关系模型的阻抗问题而产生的,用面向对象的方式去处理在关系数据库中的数据;是一个ORM框架

 

Spring:没有出现Spring之前,各层之间的访问,需要在调用层中创建被调用层的对象,使用该对象去调用相应的方法,这样层与层之间的耦合性(紧密度)就会加强,日后在修改代码的时候,会牵一发而动全身;出现了Spring,可以自动创建需要被调用的对象以及进行属性注入,也可以维护这些bean(具体的java类)之间的关系;

 

二:Spring相当于武林盟主,管理着web层,业务逻辑层,dao层,持久化层,除了维护我们自己写的bean,也有它自己定义的bean,也有第三方的bean

 

三:学习Spring

(1)   jars

(2)   applicationContext.xml

(3)   对象的使用

 

 

第一部分:Spring自动创建bean对象及属性注入

第二部分:Spring维护bean之间的关系

第三部分:IoC(控制反转)跟DI(依赖注入)

 

              第一部分:Spring容器自动创建bean对象及属性注入

 

四:入门案例

(1)//Spring容器在加载的时候,先去查看applicationContext.xml有没有配置某个bean,如果配置了,就将该bean放进Spring容器中,并实例化,然后装入内存中

<beans>

<bean id=”userService” class=”com.test.UserService”>

 


       //上面的配置就等价于 UserServiceuserService=new UserService(); --àid对应对象名

       //class属性指定该bean(UserService这个类)在项目的位置

</bean>

</beans>

 

如果出现这样的配置

就相当于创建了两个对象

 

(2)如果UserService这个类中有一个成员属性

那么通过上面的配置文件是给UserService这个类创建对象的;对象创建完之后,得用对象去调用属性,现在得name还没有赋值,现在默认是null;现在要是想给name属性赋值,那么就得有set方法,或者是构造函数,【Spring容器给bean赋值的方式有两种,一种set,一种是通过构造函数,set常用】

 

更改UserService类

package c.test;

publicclass UserService {

    private String name;

publicvoid setName(String name) {

       this.name = name;

    }

publicvoid testSpring(){

       System.out.println("spring给name赋的值"+name);

    }

}

 

 

(3)UserSerive中有了set方法,(不需要写get方法,但是PO类要写get方法),接着修改配置文件,给name赋值

 

现在只要加载Spring容器,那么UserService这个对象就有了,不再需要我们new出来,而且name的值也有了,现在就是如何从Spring容器中取出这个对象,并去调用

 

(4)新建一个Test类

 

 

 

 

 

运行Test类

 

 

(5) 关于以上案例的几点说明

●(a):在第三步(3)中,使用<value>给成员属性name赋值,但在SSH结合的时候,配置文件如下

 

<bean id="userService" class="test.service.impl.UserServiceImpl">

       <property name="genericDao"ref="userDao" />

</bean>

   

<bean id="userAction"class="test.action.UserAction">

       <property name="userService"ref="userService" />

</bean>

 

<property>节点下没有<value>属性:原因

 

这在第二部分讲

 

●     (b):依赖注入(dependencyinjection)的两种方式:setter方法注入(设值注入),构造注入

上面的例子是set注入,也是Spring官方推荐的做法

 

构造注入举例:(分四种:按照构造函数参数顺序赋值,按类型匹配入参,按索引匹配入参,上面两种方式联合使用)

 

先看第一种方式:按照构造函数参数顺序赋值的方式,对上面的例子进行两个地方的修改:一个是UserService类,一个是配置文件的修改

 

UserService类中多增加一个成员属性age;

 

 

 

----à多个构造函数,下面再修该配置文件

 

 

属性注入值得顺序要跟构造函数参数的顺序一致;如果顺序不一致,将会报异常;参数类型不匹配--à引出构造注入的第二种方式:按照类型匹配入参:

修改配置文件:将20 跟张三调换顺序

 

第三种注入方式:按照索引匹配入参:出现在UserService中出现多个带参构造函数;

修改UserService类

 

 

修改配置文件

 

运行结果

现在给school赋值

结果:

 

第四种注入方式:

联合使用第二种跟第三种方式:出现的情况是:例如:出现多个String类型的属性,以及出现多个重载的构造方法,配置文件修改如下

 

 

●     (c):上面的Test类是通过ApplicationContext(应用上下文,是个接口)的getBean()方法获取Spring容器中已经创建的bean对象,除了另一种方法:通过BeanFactory获取bean;上面提到Spring容器,Spring提供了两种容器:一种是BeanFactory,一种是ApplicationContext,两个都是接口,第二个是建立在第一个基础之上的;而这两种方式创建出来的bean的生命周期也是不一样的;这部分的在后面再说;

 

 

第二部分: Spring容器维护bean的关系

上面的入门案例说的是Spring容器如何帮我们自动创建bean的对象,下面看第二部分:Spring如何去维护这些bean的关系;

(1)   在数据库中,想维护表与表之间的关系,就得通过主外键的关系来维护,在DDL语句中需要指定的;但是维护bean的关系,则不需要,它是Spring容器自己完成的;

(2)   在上面的项目中,增加一个BookService类,另外修改UserService类,增加一个成员属性;

 

UserService类代码

 

 

BookService类代码

 

 

配置文件:

Test类代码不变;

 

结果:

 

代码说明:

(1)   UserService中的bookService属性跟name属性不同,bookService是个对象的引用,所以在配置文件中用ref,而不用value;而且在类中也得给bookService进行set设置

(2)   这些bean都是由Spring容器创建跟维护的,那么Spring容器什么时候加载?Test类中第一句代码:ApplicationContextapplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

其中applicationContext称为Spring容器对象,该对象是通过ClassPath~(“applicationContext.xml”)来创建的,在创建容器对象的同时也创建了配置文件中定义过的bean对象,并装进内存;此时也能维护它们的关系;现在在UserService中要是有BookService类的对象了,之前都是自己new出来的,现在不再需要了,在Spring容器中,它们之间有联系了;

Java中的内存有堆栈之分:

 

上面就是Spring维护bean之间的关系,通过ref来完成

 

                     

第三部分:IoC(控制反转)跟DI(依赖注入)

(1)   其实IoC跟DI就是同一个概念,只是后来Spring的设计者觉得叫做DI更好;第二部分的代码中,bean与bean的关系是在applicationContext.xml文件中配置的,它们的关系通过ref来指定,UserService中的bookService要依赖于id=”bookService”这个bean,并通过setBookService()对其进行注入;

(2)   在Test类中,使用UserService对象,完全没有用到new这个关键字,此时创建对象的权利由程序员手中转移到了Spring容器中;控制反转:就是将创建对象以及维护对象之间的关系转换到Spring容器中;

(3)   上面UserService跟BookService都是具体的java类,在实际项目中,它们都应该是接口,它们应该作为一个接口类型的成员属性存在于调用它们的某个实现类中;面向接口编程

(4)   控制反转的好处:实现层与层之间的松散耦合,便于项目的开发及维护

 

 

 

 

第四部分:BeanFactory跟ApplicationContext

一:

(1):如何验证new ClassPathXmlApplicationContext(“applicationContext.xml”);这句话一执行,对象就被创建?在构造函数中写个打印语句;-à虽然还没有getBean(),但是该bean的对象已经创建(只是在singleton=”true”)的情况下

(2):beanFactory上面的代码只是实例化容器对象,并没有创建bean的对象,当在getBean()的时候才创建,类似延时加载,使用BeanFactory可以节省内存,但是大多数情况下,还是使用ApplicationContext

(3):ApllicationContext获取bean,bean定义时候有个参数singleton=”true”,单例的,创建的是同一个对象;

 

Test类

运行结果:地址一样,只初始化一次

现在将singleton改为false

运行结果:地址不一样,初始化两次

 

ApplicationContext获取bean跟BeanFactory获取bean的区别,BeanFactory只有在getBean()的时候才会去创建bean的对象,A~~~是在new Class~~~(“applicationContext.xml”);的时候创建bean对象,且是单例的,但是这是在没有指定lazy-init的情况下;

现在设置lazy-init=“true“,那么A~~~也会跟BeanFactory一样,在getBean的时候才会创建bean的对象;当singlton=”false”的时候,若没有getBean(),也是跟lazy-init=”true”是一样的效果

 

 

二:ApplicationContext中的bean的生命周期

(1)   newClasspathXmlApplicationContext(“applicationContext.xml”);调用无参构造函数实例化

(2)   调用set()方法,注入值

(3)   一个bean实现了BeanNameAware接口,则可以调用BeanNameAware的setBeanName()方法,获取该实例对象的名字,就是id指定的名字

(4)   一个bean实现BeanFactoryAware接口

(5)   一个bean实现ApplicationContextAware接口

(6)   自己写个后置处理器MyBeanPostProcessor,实现BeanPostProcessor接口,并实现该接口的两个方法;然后在配置文件中定义该bean就行<bean id=””class=””/>

【类似Filter,EncodingFilter要实现Filter接口,并实现其三个方法init(),destroy(),detory(),任何请求都要经过该过滤器;

后置处理器过滤指定的IP地址等

先调用的是该后置处理器的postProcessBeforeInitialization();

它的postProcessAfterInitialization()方法需要在第九步执行

(7):一个bean实现InitializingBean接口,实现afterPropertiesSet()方法;

(8):在xml中的<bean>节点中配置初始化方法<bean init-method=”myInit()”…..>

在bean中自己定义一个myInit()方法

(9):调用后置处理器的postProcessAfterInitialization()方法

(10):使用bean对象

(11):容器关闭,实现DisposableBean接口,实现destory()方法;

(12):在xml文件的<bean>节点下自定义destory-method方法,跟第八步类似

 

 

 

 

第十一步跟第十二步的代码无法打印出来,原因是,此时的容器以及关闭了,destory中应该是释放资源的代码,虽然没有打印,但是肯定是执行了

 

三:BeanFactory中bean的生命周期

上面的是ApplicationContext的bean生命周期,下面用BeanFactory获取bean,修改代码

其他代码不修改,执行结果:

少了第五步,第六步跟第九步

 

 

第五部分:对bean中不同数据类型的装配方式

一:数组类型-à

新建Valuation类

配置bean

Test类中使用bean

打印结果:

应用-à

在applicationContext.xml文件中给LocalSessionFactoryBean的mappingResources属性注入值,值为对象关系映射文件的文件名

 

二:List集合注入值

新建一个NameService类

配置bean

修改Valuation类

配置id=”valuation”这个bean

 

Test使用bean

 

三:set集合注入值

在Valuation中增加新的成员属性

 

配置文件中注入值

Test中使用bean

可以看出来,给Set集合注入6个值,但是只出现两个值:原因是:set集合中的元素是无须的,不可重复的,若是有相同元素,则会覆盖,List集合有序且可以重复

 

打印结果:

 

四:map集合注入值

Valuation类

配置文件:

Test类:

结果:

五:给Properties属性集合注入值,在配置Hibernate的属性用到

 

六:继承的配置

新建两个类Son跟Father

Father

配置文件:

 

Test使用bean

结果:

 

如果子类要想覆盖父类中某个属性的值,重新定义即可

 

 

       第六部分:自动装配bean及Spring特殊bean

一:bean的自动装配

有5种:byName,byType,constructor,autodetect,defalut

Default型的跟其他四种不同,它必须依赖<beans>几点的default-autowire指定的值;

1.      byName是根据其他bean的id的值来匹配:autowire=”byName”

2.      byType是根据其他bean的class的类名来匹配 autowire=”byType”

3.      constructor是根据构造函数的方式进行匹配 autowire=”constructor”

4.      autodetect是在第二种跟第三种选择一种 autowire=”autodetect”

5.      default类型

<beans

       Default-autowire=”no”;不启动默认装配

> 

 

 

二:Spring特殊bean

1.      后置处理器:BeanPostProcessor,在叙述ApplicationContext的bean生命周期时讲过,处于生命周期的第六步跟第九步

2.      配置信息分离(分散配置)PropertyPlaceholderConfigurer;

主要作用:从主xml文件中分离出部分的配置信息,例如数据库的Url,用户名跟密码

好处:无需修改主xml文件,只需要修改属性文件即可

 

引入属性文件方式

<context:property-placeholderlocation="classpath:位置 " ignore-unresolvable="true" />

在主xml文件中,要使用占位符变量去获取值:${variable}-à对应着properties中的key

在applicationContext.xml中dataSource跟sessionFactory用到

 

 

 

 

 

Spring Boot系列十三 Spring Boot集成RabbitMQ 1. 概述之前我有一系列关于RabbitMQ文章介绍了RabbitMQ的用法,本篇我们介绍如何在Spring Boot中集成RabbitMQ。本篇主要内容如下: 在Spring boot中消息的发送和接收的两种方式的demo 配置使用MessageConverter对消息序列化 2. Demo工程公共部分介绍工程名称:rabbitmq需要在我们的工程中的pom.xml引入新jar <!-- spri 阅读详情

相关推荐

Java Spring、Spring MVC、Spring Boot 和 Spring Cloud 的关系与区别

本文详细介绍了 Java 开发中常用的 Spring 系列框架及其关系。Spring 是核心框架,提供控制反转(IoC)和面向切面编程(AOP)等基础功能。Spring MVC 是 Spring 的模块,专注于 Web 开发,采用 MVC 设计模式。Spring Boot 简化了 Spring 应用的初始搭建和开发,提供默认配置和嵌入式服务器。Spring Cloud 基于 Spring Boot,扩展了分布式系统开发的能力,提供服务发现、熔断器等功能。这些框架共同构成了强大的 Java 开发生态系统,满足

C_V_Better的博客 1307

SSH项目数值类型不匹配导致无法跳转到Action

最近碰到了一个问题,点击某条数据的某个按钮时无法跳转到Action层(而其他数据的同一按钮能正常进入后台),浏览器调试发现报了如下的500错误: java.lang.RuntimeException: Invalid action class configuration that references an unknown class named [safeCheckAction] 看起来好像是

duqian42707的博客 712

Spring MVC 与 Spring Boot 的差异到底在哪?

本文深入对比了传统SpringMVC与SpringBoot的核心差异。作者结合开发经验,从配置方式(XML到自动配置)、依赖管理(手动引入到Starter)、部署模式(外置Tomcat到内嵌容器)、外部化配置等方面进行剖析,指出SpringBoot通过自动配置砍掉了80%的模板代码,但同时也可能带来配置冲突等问题。文章强调SpringBoot并非替代SpringMVC,而是其"脚手架",底层仍依赖DispatcherServlet等核心组件。

无 595

搭建Spring开发环境并编写第一个Spring小程序

本文详细介绍了两种搭建Spring开发环境的方法:自动配置方式和手动配置方式。自动配置方式通过MyEclipse工具实现,适合初学者;手动配置方式需要下载Spring软件包并手动添加JAR文件,灵活性更高。文章通过创建动物接口实现和人接口实现两个示例项目,分别演示了两种配置方式的具体步骤,包括创建项目、添加Spring支持、配置JAR包位置、编写测试代码等。最后指出自动配置简单快捷,手动配置则更灵活,建议初学者使用类路径方式查找配置文件。两种方法各有所长,开发者可根据实际需求选择合适的配置方式。

ywl470812087的博客 11万+

Spring 容器

/ 标记该类为Spring Bean,容器会自动扫描并创建实例@Component// 标记该类为Spring配置类// 指定扫描的包,容器会自动识别包下的@Component/@Service/@Repository/@Controller等注解的类Spring 容器是管理 Bean 的核心组件,负责 Bean 的创建、依赖注入和全生命周期管理,核心价值是解耦;实际开发中优先使用(而非基础的),主流方式是基于注解配置类(

weixin_53050448的博客 650

使用IntelliJ IDEA中的Spring Initializr来快速构建Spring Boot/Cloud工程

我相信许多初学者都看了Spring Boot和Spring Cloud相关的博文中,都会涉及Spring Boot工程的创建的问题。而一般所看到的都是使用IntelliJ IDEA 工具来创建,并且方便许多,而创建的方式多种多样之前我是通过Maven来手工构建,也可以通过SPRING INITIALIZR页面工具来创建,相信每一个人都有自己喜欢而熟练的方式。接下来介绍嵌入在的IntelliJ

_William_Cheung的博客 3万+

最新的Spring官网如何下载Spring框架

最新的Spring官网如何下载Spring框架。特此写一篇简单的教程,供大家分享。 1. 首先打开Spring官网 https://spring.io/ 2. 点击页头 PROGECTS 选项 3. 打开 SPRING FRAMEWORK 一项 4. 点击页面中的GitHub 图标 5. 在文章中部,有一个Downloading A...

脑壳疼 5119

避坑指南:C# OpenCvSharp调用4K摄像头常见的5个问题及解决方案

本文针对C# OpenCvSharp调用4K高清摄像头时常见的五大难题,提供了详细的解决方案。内容涵盖分辨率设置失效、帧率卡顿、内存泄漏、硬件驱动兼容性以及性能优化实战,帮助开发者高效稳定地处理4K视频流,提升智能安防监控等项目的开发效率。

weixin_29268331的博客 424

Spring Boot、Spring Cloud实现原理

Spring、Spring Boot、Spring Cloud实现原理

tszc95的博客 554

Halcon深度图转伪彩图

Halcon深度图转伪彩图

Quintin 3935

Qt上位机实战:5步搞定STM32 IAP固件升级(附拖拽文件处理技巧)

本文详细介绍了如何使用Qt开发STM32 IAP固件升级上位机。通过五个核心步骤,包括理解IAP机制、搭建Qt环境、实现拖拽文件加载、封装串口通信以及设计可靠通信协议,帮助开发者快速构建一个稳定、易用且支持图形化操作的固件升级工具,显著提升嵌入式产品开发与维护效率。

ss78901的博客 1082

spring

在应用开发中用的非常多, @Component注解是一个通用注解,可以用在于任何类上。包括普通java类,业务逻辑组件,持久化对象等等。通过@Component注解spring自动创建该类的实例注入SpringIOC容器中。@Bean是用于配置类中声明一个Bean的,它通常是用于配置类的方法上面,表示把这个方法的返回对象注册到Spring IOC容器中。通过@Bean自定义Bean的创建和初始化过程,包括指定Bean的名称、作用域、依赖关系等。1.用途不同@Component用于标识普通的类。

黑冰[̲̅V̲̅I̲̅P̅] 818

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 402

通过Spring官网下载Spring jar包

这几天刚接触Spring框架,算是在入门阶段吧,对于初学者来说学习Spring框架其中有很多准备工作需要去做的,就比如今天我要讲的如何下载Spring中需要的一些jar包。 【第一步】 打开Spring官网:https://spring.io,点击PROJECTS,如下所示 【第二步】 点击SPRING FRAMEWORK图标 【第三步】 点击SPRING FRAMEWORK图...

1116

墨水屏高效开发:架构、开源库与实战优化指南

嵌入式显示技术中,电子墨水屏以其类纸观感和超低功耗特性,在电子书阅读器、智能办公本及工业仪表等场景中占据独特地位。其工作原理基于微胶囊电泳技术,仅在画面刷新时消耗电能,静态显示时功耗近乎为零,这带来了极致的续航优势。为实现流畅的交互体验,开发者需构建分层渲染架构,通过硬件抽象层统一驱动接口,并引入帧缓冲与差异比较算法智能决策局部刷新区域,从而大幅降低刷新延迟与功耗。开源库如GxEPD2和LVGL为墨水屏适配提供了关键支持,结合波形文件管理与电源优化策略,能有效解决残影与卡顿问题。本文聚焦于eink墨水屏高效

weixin_42545636的博客 411

基于 YOLOv26 的车辆违规停车检测系统:实时监控

本文提出了一种基于YOLOv26的车辆违规停车实时检测系统。系统采用多模块架构,包括视频预处理、YOLOv26目标检测、DeepSORT目标跟踪、停车区域定义、行为分析和违规判定等功能模块。关键技术包括使用YOLOv26s模型进行车辆检测,结合DeepSORT算法实现车辆跟踪,支持多种停车区域定义方式(多边形、矩形、限时区域等)。系统通过边缘计算平台部署,实现了对道路边、禁止停车区等场景的实时监控,能够准确识别长时间停车、禁止区域停车等违规行为,并触发告警机制。实验结果表明,该系统在车辆检测准确率和违规判定

一键难忘的博客 776

如何下载Spring框架

首先进入Spring官网:https://spring.io/ 点击PROJECTS   找到SPRING FRAMEWORK 并点击  因为是托管在github上的,所以点击github标志  找到Spring Framework Artifacts 找到Spring仓库连接  点击Artifacts选项 然后找到菜单下的 libs-release-local...

liutao2001的博客 2万+

多智能体记忆架构设计:从分层模型到一致性实践

多智能体记忆架构本质上是一个有状态、分布式、支持遗忘的知识系统。从分层模型入手,结合RBAC隔离、版本向量一致性以及混合存储,可以构建出既灵活又健壮的生产级方案。可微分记忆:让记忆的读写操作嵌入端到端训练。基于大模型的记忆压缩:用LLM自动生成情景摘要,取代规则式遗忘。联邦记忆:不同组织之间的多智能体系统在不共享原始数据的情况下协同记忆。希望本文能为你的多智能体项目提供一块坚实的基石。欢迎在评论区分享你在实践中遇到的记忆架构难题。

Ven%的博客 171

Spring8大模块

Spring8大模块

SSSSSSch的博客 979

推理引擎终极对决:TensorRT vs ONNX Runtime,YOLOv8速度差30%的核心原因与实操指南

若你使用NVIDIA GPU,且追求极致速度和低延迟,TensorRT是唯一选择,尤其是边缘设备和实时场景;若你需要跨硬件部署、快速验证原型,或预算有限(无需NVIDIA GPU),ONNX Runtime是性价比之王;对于YOLOv8这类检测模型,TensorRT的FP16/INT8量化是“免费的速度提升”,建议优先采用。最后提醒:推理引擎的优化是“细节决定成败”——同样的引擎,不同的预处理方式、显存配置、批大小,都会导致10%-20%的性能差异。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1027

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring系列——两万字长文教会你Spring (超详细!!!)

到此,我们学习完了 Spring 框架,包括: Spring 体系结构 Spring Bean Spring AOP Spring JDBC Spring 事务管理 写此文章是为了做个笔记,等以后自己忘记了可以回头快速上手。同时也分享给小伙伴们,希望我们都能越来越好,不会就学 B 站,不懂就问 AI,总好过自己两耳不闻窗外事的独自琢磨。 最后认识一下吧,笔者叫`北迁`,hhh~~。

weixin_63009611的博客 1181

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java-24 深入浅出 Spring 全景:从起源到 Spring 6 一文打通 IoC / AOP / 发展史

Spring 是面向 Java 平台的分层 Full-Stack 轻量级开源框架,以控制反转(IoC)和面向切面编程(AOP)为核心理念,简化企业级应用开发。本文系统讲解 Spring 的发展历程:2003 年 Rod Johnson 推出雏形,2004 年 3 月发布 1.0 正式版,2006 年 Spring 2.0 引入 XML Schema 命名空间,2009 年 12 月 Spring 3.0 基于 Java 5 并引入 SpEL,2013 年 12 月 Spring 4.0 全面支持 Java

谢谢你的喜欢 我们一起无限进步 5188

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

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring5(1) —— Spring简介

0.什么是SPRING Spring : 春天 —>给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架(SPRING框架的前身) 2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版 很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学 Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术 1.链接 S

Jzandth的博客 288
上一篇: jsp/servlet
下一篇: Hibernate
Java_lab
博客等级 码龄14年 4粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值