天天看点

手撕Spring5框架(一)Spring5框架介绍

概述:Spring是一个轻量级、开源的JavaEE框架。

目的:解决企业应用开发的复杂性

核心部分:IOC(控制反转)和AOP(面向切面编程)。

既然说到了核心部分,那么就在说说Spring的所有组成部分:

组成部分如下图:

手撕Spring5框架(一)Spring5框架介绍

我们可以将Spring的组成部分分为八类:

  • Data Access/Integration:数据访问或者叫数据整合,主要负责包括对JDBC的封装,对象关系映射,封装JAVA对象与XML之间转换的功能,JAVA消息服务等。
  • Web: 网络模块的整合,主要负责包括网络通信,Web相关的开发,反应式Web应用(WebFlux),以及大名鼎鼎的Spring MVC也在这个模块中。
  • AOP:面向切面编程,提供AOP(面向切面编程)的实现
  • Aspects:提供的对AspectJ框架的整合
  • Instrument:整合模块,对服务器的代理接口
  • Messaging:为集成messaging api和消息协议提供支持
  • Core Container:核心工具包,Spring的重要组成部分,包括对类的处理、应用上下文的处理、以及Spring表达式的处理
  • Test:对JUNIT等测试框架的简单封装

通过Spring整合的这么功能我们可以总结出Spring的如下特点:

Spring的特点:

  • 方便解耦,简化开发
  • AOP编程的支持
  • 方便程序的测试,集成Junit
  • 方便整合各种其他优秀框架
  • 声明式事务的支持
  • 降低JavaEE API的使用难度
  • Java源码是经典的学习案例

通过一个入门案例,让我们对Spring 有一个更好的了解吧

1)环境搭建

创建Mavn项目,引入Spring5的坐标,当前使用的spring5版本:5.2.8

  • 如何引用Spring5的相关jar包?

访问地址:https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Artifacts

从图上我们可以看到Spring框架有20多个模块分别在不同的jar包管理,那么我们如果想创建一个简单的spring项目应该引入哪些jar包呢?

手撕Spring5框架(一)Spring5框架介绍

需要引入4个核心基础jar包和一个依赖的日志包common-logging、Junit单元测试框架,一共6个包

spring-core
spring-aop
spring-context
spring-expression
common-logging
junit
           
手撕Spring5框架(一)Spring5框架介绍
  • POM引入jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.learn.spring5</groupId>
    <artifactId>spring5-learn-1</artifactId>
    <version>1.0-SNAPSHOT</version>

        <dependencies>
            <dependency>
            <!--spring-core-->
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.2.8.RELEASE</version>
            </dependency>
            <!--spring-beans-->
            <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
            <!--spring上下文包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.8.RELEASE</version>
            </dependency>
                <!--spring表达式包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>5.2.8.RELEASE</version>
            </dependency>
                <!--日志包-->
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
            </dependency>
            
             <!--Junit单元测试框架-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            
        </dependencies>
</project>
           

项目引入的jar包最终如下:

手撕Spring5框架(一)Spring5框架介绍

2)案例演示,编写代码

1. 创建一个User类

package org.learn.spring5;

/**
 * User类
 */
public class User {

    /**
     * add方法
     */
    public void add(){
    System.out.println("add...........");
}
}
           

2.通过Spring的配置文件bean1.xml实例化一个对象

<?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">
    
	<!--通过Spring配置User对象-->
    <bean id="user" class="org.learn.spring5.User"></bean>

</beans>
           

3.创建测试类

package org.learn.spring5;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpring5 {
    @Test
    public void test() {
        //1.加载spring的配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        //2.获取配置创建的对象
            //第一个参数是配置文件中配置的User对象的ID
        User user = context.getBean("user",User.class);
        System.out.println(user);
        user.add();
    }
}
           

程序的执行结果

[email protected]
add...........
           

综上所述我们完成了一个最简单的Spring项目,从代码上我们有没有对Spring些许认识呢?

思考一下,引入了Spring框架后,和我们之前开发的模式有什么区别呢?

通过代码结合上面讲述的Spring的特点,我们是不是可以发现Spring的引入后,可以方便的对对象进行解耦,传统的模式是我们自己手动是实例化创建对象,现在我们可以通过Spring的配置文件去实例化对象,然后在代码里直接调用该对象的方法就可以完成对象的方法执行。

现在是不是还是处于它不认识你,你也不太认识它的情况?没关系我们先了解一个项目是如何引入Spring框架,对Sring有一个简单的认知,实现和理解Spring给我们带来的方便操作后,我们继续往后学。