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);

BeanFactoryApplicationContext的区别在于,BeanFactory的实现是按需创建,即第一次获取Bean时才创建这个Bean,而ApplicationContext会一次性创建所有的Bean。实际上,ApplicationContext接口是从BeanFactory接口继承而来的,并且,ApplicationContext提供了一些额外的功能,包括国际化支持、事件和通知机制等。通常情况下,我们总是使用ApplicationContext,很少会考虑使用BeanFactory

原文地址:https://www.cnblogs.com/wenxuehai/p/14705216.html