Spring框架介绍与搭建

1. 简介

1.1 什么是Spring

    Spring是一个由Rod Johnson为了解决企业应用开发的复杂性而创建的开源框架。

    它也是一个容器框架,用来装载javabean(java对象),第三方框架(如mybatis),起到一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的提供控制反转(IoC)和面向切面(AOP)功能的容器框架。

1.2 为什么用Spring

    Spring框架为现代基于Java的企业应用程序提供了一个全面的编程和配置模型——在任何类型的部署平台上。

    Spring的一个关键元素是应用程序级的基础设施支持:Spring关注企业应用程序的“管道”,这样团队就可以关注应用程序级的业务逻辑,而不必与特定的部署环境建立不必要的联系。

  1. 方便解耦,简化开发

    Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

  2. AOP编程的支持

    Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

  3. 声明式事务的支持

    只需要通过配置就可以完成对事务的管理,而无需手动编程

  4. 方便程序的测试

    Spring对Junit4支持,可以通过注解方便的测试Spring程序

  5. 方便集成各种优秀框架

    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

  6. 降低JavaEE API的使用难度

    Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

1.3 Spring5的特性
  • Core
    IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP.

  • Testing
    Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient.

  • Data Access
    Transactions, DAO Support, JDBC, R2DBC, O/R Mapping, XML Marshalling.

  • Web Servlet
    Spring MVC, WebSocket, SockJS, STOMP Messaging.

  • Web Reactive
    Spring WebFlux, WebClient, WebSocket, RSocket.

  • Integration
    Remoting, JMS, JCA, JMX, Email, Tasks, Scheduling, Caching.

  • Languages
    Kotlin, Groovy, Dynamic Languages.

2. Spring框架核心

在这里插入图片描述

  • 具体模块如上图所示,其实Spring 框架中的核心主要有两个,一个是IOC(控制反转),一个是AOP(面向切面编程)。
2.1 IOC(控制反转)

        所谓IOC就是把传统模式中需要自己通过 new 实例化构造函数,或者通过工厂模式实例化的任务交给容器。
        通俗的来理解,就是本来当需要某个类(构造函数)的某个方法时,自己需要主动实例化变为被动,不需要再考虑如何实例化其他依赖的类,只需要依赖注入 (Dependency Injection, 下文统一简称为 DI), DI 是 IOC 的一种实现方式。所谓依赖注入就是由 IOC 容器在运行期间,动态地将某种依赖关系注入到对象之中。所以 IOC和DI,只是从不同的角度的描述的同一件事情,就是通过引入 IOC 容器,利用依赖注入的方式,实现对象之间的解耦。

2.2 AOP(面向切面编程)

        AOP也是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
        AOP所要实现的目的为,保证开发者不修改源代码的前提下,去为系统中的一个或多个业务组件添加某种通用功能。

  • AOP 其实就是代理模式的典型应用,按其代理方式的不同可以分为两类:
    • 静态 AOP 实现, AOP 框架在编译阶段对程序源代码进行修改,生成了静态的 AOP 代理类(生成的 *.class 文件已经被改掉了,需要使用特定的编译器),比如 AspectJ。
    • 动态 AOP 实现, AOP 框架在运行阶段对动态生成代理对象(在内存中以 JDK 动态代理,或 CGlib 动态地生成 AOP 代理类),如 SpringAOP。
  • AOP 的特性术语:
    • 通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
    • 连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
    • 切点(PointCut): 可以插入增强处理的连接点。
    • 切面(Aspect): 切面是通知和切点的结合。
    • 引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。
    • 织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。
2.3 Spring 中 bean 的作用域

singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
prototype : 每次请求都会创建一个新的 bean 实例。
request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。
global-session: 全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。Portlet是能够生成语义代码(例如:HTML)片段的小型Java Web插件。它们基于portlet容器,可以像servlet一样处理HTTP请求。但是,与 servlet 不同,每个 portlet 都有不同的会话

2.4 Spring 中 bean 生命周期

Bean 容器找到配置文件中 Spring Bean 的定义。
Bean 容器利用 Java Reflection API 创建一个Bean的实例。
如果涉及到一些属性值 利用 set()方法设置一些属性值。
如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入Bean的名字。
如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader对象的实例。
如果Bean实现了 BeanFactoryAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoade r对象的实例。
与上面的类似,如果实现了其他 *.Aware接口,就调用相应的方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessBeforeInitialization() 方法
如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。
如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessAfterInitialization() 方法
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。
在这里插入图片描述

3. Spring快速搭建

  • 首先确保你的机器上部署好jdk8及以上版本的开发环境。
3.1 官方提供的搭建方式
3.2 使用IDEA搭建
  • File --> New --> Project.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 最后打开的项目目录结构如下:
    在这里插入图片描述
  • 在你的demo中加入一个controller
@Controller
public class DemoController {

    @RequestMapping
    @ResponseBody
    public String hello(){
        return "hello world!";
    }

}
  • 直接运行DemoApplication的main方法
    在这里插入图片描述

  • 最后打开 localhost:8080 输出如下
    在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值