一、什么是Spring
Spring框架是一个开放源代码的J2EE应用程序框架,是针对bean的生命周期进行管理的轻量级容器。
Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
从这里提取出一些关键词:
- 开源:免费的,可以提供源代码。
- J2EE:全称 Java 平台企业版,是Sun公司为企业级应用推出的标准平台。JavaEE是个大杂烩,包括Applet、EJB、JDBC、JNDI、Servlet、JSP等技术的标准,运行在一个完整的应用服务器上,用来开发大规模、分布式、健壮的网络应用。
- bean:符合一定规范编写的 Java 类,不是一种技术,而是一种规范。
- 轻量级:需要引入其他的 jar 包依赖数量和体积都比较小。另外,在使用 spring 的过程中,不需要再依赖其他组件,自己可以单独使用。
- 框架:使用 spring 后,可以让开发更加方便,代码更加简洁,解决企业应用开发的复杂性。
spring 有2大核心:
- IOC:是控制反转,比如之前创建对象的时候需要 new,现在则是把创建对象的过程交给 spring 管理,帮助我们创建对象。
- AOP:是面向切面,在不修改源代码的前提下,对功能进行增强。这一点可以联想到 python 里的装饰器。
二、Spring的特点
1. 方便解耦,简化开发
通过 Spring 提供的 IOC 容器,我们可以将对象之间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。
2. AOP编程的支持
通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP(面向对象编程) 实现的功能可以通过 AOP 轻松应付。
3. 声明式事务的支持
在 Spring 中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
4. 方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,在 Spring 里,测试不再是昂贵的操作,而是随手可做的事情。
例如:Spring 对 Junit4 支持,可以通过注解方便的测试 Spring 程序。
5. 方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,相反,Spring 可以降低各种框架的使用难度,Spring 提供了对各种优秀框架(如Struts、Hibernate、Hessian、Quartz)等的直接支持。
6. 降低Java EE API的使用难度
Spring 对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过 Spring 的简易封装,这些Java EE API的使用难度大为降低。
7. Java 源码是经典学习范例
Spring 的源码设计精妙、结构清晰、匠心独运,处处体现着大师对 Java 设计模式灵活运用以及对Java技术的高深造诣。Spring 框架源码无疑是 Java 技术的最佳实践范例。如果想在短时间内迅速提高自己的 Java 技术水平和应用开发水平,学习和研究 Spring 源码将会使你收到意想不到的效果。
二、入门案例
1. 下载spring
进入 spring 官网,可以看到目前最新的版本是5.3.8。
从下载地址,找到对应版本进行下载。
下载完后,正常解压即可。
2. idea新建Project
创建普通的 java 工程即可。
点击下一步,可以选择一个模板。
输入完项目名称,点击 finish 完成创建。
3. 导入spring5的相关jar包
这里是 spring5 的模块结构图。
但是目前的入门案例不需要用到这么多依赖,只要核心的即可。
现在打开刚才解压出的spring下的 lib 文件夹,4个 jar 包赫然在目。
另外,还需要一个日志的包,这个到网上下载一下即可,地址,下载commons-logging-1.2-bin.zip
。
在项目里建一个文件夹lib,把上面4个,加上1个日志,5个jar包 复制到这里。
点击 File 下的 Project Structure,按照图示导入lib下的jar 包,点击 apply 即可。
4. 编写代码
使用spring的方式创建对象。先写一个 User 类以供使用。
package com.pingguo.spring5; public class User { public void add() { System.out.println("add..."); } }
spring有多种方法创建对象,比如 配置文件、注解,入门案例使用配置文件演示。
创建配置文件
配置文件是 xml 格式。
右击 src - new - XML Configuration File - Spring Config,完成创建,在此文件里完成对象配置。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--配置User对象--> <bean id="user" class="com.pingguo.spring5.User"></bean> </beans>
通过bean 标签来创建对象的,固定写法。这里的 id 是个别名,供获取对象使用。
测试代码
package com.pingguo.spring5.testdemo; import com.pingguo.spring5.User; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring5 { @Test public void testAdd(){ // 加载配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); // 获取配置文件创建的对象 User user = context.getBean("user", User.class); System.out.println(user); user.add(); } }
如果获取对象正常,可以看到打印对象的地址,还可以看到调用 add() 方法的输出。
结果正确。