zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    sysybench-测试工具
    pip安装到指定目录的方案对比
    更好的创建构造函数的方式
    DeDeCMS-v5.7-漏洞分析
    DVWA靶场
    Fastadmin前台Getshell漏洞分析
    Yii反序列化漏洞分析
    SparkGraphX中的PR算法和pregel迭代算法
    关于linux下,ls vi等命令失效的解决方法(配置下环境变量出现问题)
    埋点的三种方式
  • 原文地址:https://www.cnblogs.com/wenxuehai/p/14705216.html
Copyright © 2011-2022 走看看