Spring的基本使用
1、spring的基本介绍
Spring是一个支持快速开发Java EE应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备。Spring最早是由Rod Johnson这哥们在他的《Expert One-on-One J2EE Development without EJB》一书中提出的用来取代EJB的轻量级框架。随后这哥们又开始专心开发这个基础框架,并起名为Spring Framework。随着Spring越来越受欢迎,在Spring Framework基础上,又诞生了Spring Boot、Spring Cloud、Spring Data、Spring Security等一系列基于Spring Framework的项目。Spring Framework是最核心的Spring框架。
Spring Framework主要包括几个模块:
- 支持IoC和AOP的容器;
- 支持JDBC和ORM的数据访问模块;
- 支持声明式事务的模块;
- 支持基于Servlet的MVC开发;
- 支持基于Reactive的Web开发;
- 以及集成JMS、JavaMail、JMX、缓存等其他模块。
Spring 框架是由于软件开发的复杂性而创建的,Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情,它是最受欢迎的企业级 Java 应用程序开发框架。Spring 框架是一个开源的 Java 平台,它是轻量级的框架,其基础版本只有 2 MB 左右的大小。Spring的用途不仅仅限于服务器端的开发,Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。
三层架构:
- A 表现层(web层)
- B 业务层(service层)
- C 持久层(dao层)
从Spring Framework 5.1开始,Spring需要JDK 8+(Java SE 8+),并提供对JDK 11 LTS的现成支持。
MVC架构:
首先用户的请求会到达 Servlet,然后根据请求调用相应的 Java Bean,并把所有的显示结果交给 JSP 去完成,这样的模式我们就称为 MVC 模式。
- M 代表 模型(Model):模型就是数据,就是 dao,bean
- V 代表 视图(View):就是网页, JSP,用来展示模型中的数据
- C 代表 控制器(controller):控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,
spring的框架结构:
1.1、spring的优点
- spring是一个轻量级、非入侵式、开源免费的框架(容器)
- 控制反转(IOC)、面向切面编程(AOP)
- 方便进行事务操作,方便集合各种优秀的框架
总结,spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!
2、spring的基本使用
2.1、下载spring
spring 官方下载地址:https://repo.spring.io/release/org/springframework/spring/
上面链接可以找到各个版本的下载地址,比如选择 5.2.6 版本:
2.2、使用 spring
下载完 sprig 解压文件后可以看到很多jar 包,将 spring 所必需的四个包和 commons-logging 包导入项目当中:
spring 框架依赖的jar包有 commons-logging,如果不添加的话会报错。
先编写一个简单的 User 类,然后在 src 目录下新建一个spring的配置文件即 xml 文件,该配置文件可自定义,比如 bean01.xml。
User 类:
package test;
public class User {
public void add() {
System.out.println("add。。。");
}
}
spring 配置文件 bean01.xml 如下,class 里面写的是完整类名。
<?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"> <!-- 配置创建的对象--> <bean id="user" class="test.User"></bean> </beans>
然后就可以随便建一个测试类来进行测试:
package test.testDemo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import test.User;
public class Test01 {
public static void main(String[] args) {
//加载spring配置文件,并创建了配置文件中配置的类的实例对象)
ApplicationContext context = new ClassPathXmlApplicationContext("bean01.xml");
//获取bean,即配置创建的对象
User user = (User) context.getBean("user"); //getBean()方法里面的参数是 xml 配置文件中的bean节点的id
//调用
user.add();
}
}
执行上面代码可以看到输出 User 类中的 add() 方法。
2.3、ApplicationContext接口
我们从创建Spring容器的代码:
ApplicationContext context = new ClassPathXmlApplicationContext("bean01.xml"); //创建了一个Spring的IoC容器实例,然后加载配置文件,让Spring容器为我们创建并装配好配置文件中指定的所有Bean。
可以看到,Spring容器就是ApplicationContext
,它是一个接口,有很多实现类,这里我们选择ClassPathXmlApplicationContext
,表示它会自动从classpath中查找指定的XML配置文件。
获得了ApplicationContext
的实例,就获得了IoC容器的引用。从ApplicationContext
中我们可以根据Bean的ID获取Bean,也可以根据Bean的类型获取Bean的引用:
User user = (User) context.getBean("user"); //根据Bean的ID获取Bean
User user = (User) context.getBean(User.class); //根据Bean的类型获取Bean的引用
Spring还提供另一种IoC容器叫BeanFactory
,使用方式和ApplicationContext
类似:
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("application.xml"));
User user = factory.getBean(User .class);
BeanFactory
和ApplicationContext
的区别在于,BeanFactory
的实现是按需创建,即第一次获取Bean时才创建这个Bean,而ApplicationContext
会一次性创建所有的Bean。实际上,ApplicationContext
接口是从BeanFactory
接口继承而来的,并且,ApplicationContext
提供了一些额外的功能,包括国际化支持、事件和通知机制等。通常情况下,我们总是使用ApplicationContext
,很少会考虑使用BeanFactory
。