【Spring】基础

定义

  Spring是一个轻量级的、开源的Java框架,它可以简化开发。

这里写图片描述

版本信息
  • 2003年6月,Spring Framework第一次发布在Apache 2.0许可证下。
  • 2004年3月,发布了1.0版本。
  • 2006年10月,发布了2.0版本。
  • 2009年12月,发布了3.0版本。
  • 2013年12月,发布了4.0版本。
  • 2017年9月,发布了5.0版本。

JDK要求:

  • Spring Framework 5.x → JDK 8+
  • Spring Framework 4.x → JDK 6+
优点
  • 方便解耦,简化开发。
    Spring就是一个大工厂,可以将所有对象的创建和依赖关系维护交给Spring管理。
  • AOP编程的支持
    Spring提供面向切面编程,可以方便地实现对程序进行权限拦截、运行监控等功能。
  • 声明式事务的支持
    只需要通过配置就可以完成对事务的管理,无须手动编程。
  • 良好的封装
    Spring对JavaEE开发中易用性差的一些API(JDBC、JavaMail等)进行了封装,降低了它们的使用难度。
  • 方便程序的测试
    Spring对JUnit4支持,可以通过注解方便地测试Spring程序。
体系结构

  Spring采用分层架构,包含一系列的功能要素,体系结构如图1-1所示:

这里写图片描述
图1-1 Spring的体系结构

  图中包含了Spring框架的所有模块, 这些模块可以满足大多数企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。接下来分别对各个模块进行介绍。

Core Container

  Spring的核心容器是其他模块建立的基础,由Beans模块、Core核心模块、Context上下文模块和Expression Language表达式语言模块组成,具体介绍如下。

  • Bean:提供了BeanFactory,是工厂模式的经典实现,Spring将管理对象称为Bean。
  • Core:提供了Spring框架的基本组成部分,包括IoC和DI功能。
  • Context:建立在Core和Beans模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext接口是上下文模块的焦点。
  • SpEL:是运行时查询和操作对象图的强大的表达式语言。

Data Access/Integration

  • JDBC:提供了一个JDBC的抽象层,大幅度地减少了在开发过程中对数据库操作的代码。
  • ORM:对流行的对象关系映射API(JPA、JDO、Hibernate和iBatis)提供的集成层。
  • OXM:对象/XML映射。
  • JMS:Java消息服务。
  • Transactions:事务控制。

Web模块

  • Web:基础Web功能,例如:文件上传。
  • WebMVC:SpringMVC实现。
  • WebFlux:一个新的非堵塞函数式Reactive Web框架,可以用来建立异步非阻塞式的事件驱动,并且扩展性非常好。
  • WebSocket:为Web应用提供的高效通信工具。

其他模块

  • AOP:提供了面向切面编程实现,允许定义方法拦截器和切入点。
  • Aspects:提供与AspectsJ的集成,它是一个功能强大且成熟的面向切面编程框架。
  • Instrumentation:提供了类工具的支持和类加载器的实现。
  • Messaging:用于构建基于消息的应用程序。
  • Test:测试。
Spring的IoC容器

  IoC是指在程序的设计中,实例不再由调用者来创建,而是由Spring容器来创建。控制权由代码转移到了外部容器,控制权发生了反转,也就是Spring的IoC思想。Spring提供了两种IoC容器,分别为BeanFactory和ApplicationContext。

BeanFactory

  BeanFactory是基础类型的IoC容器,由org.springframework.beans.factory.BeanFactory接口定义,并提供了完整的IoC服务支持。BeanFactory就是一个管理Bean的工程,它主要负责初始化各种Bean,并调用它们的生命周期方法。
  BeanFactory接口有多种实现,最常见的是使用org.springframework.beans.factory.xml.XmlBeanFactory根据XML配置文件中的定义来装配Bean。创建BeanFactory实例时,需要提供Spring所管理容器的详细配置信息,这些信息通常采用XML文件形式来管理,加载配置信息的语法如下:

BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("F:/applicationContext.xml"));

  这种加载方式在实际开发中并不多用。

ApplicationContext

  ApplicationContext是BeanFactory的子接口,也被称为应用上下文。该接口的全路径为org.springframework.context.ApplicationContext,它不仅提供BeanFactory所有的功能,还以一种更加面向框架的方式增强了BeanFactory的功能。创建ApplicationContext接口实例,通常采用两种方法:

  • ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息,把上下文定义文件当作类路径资源。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  • FileSystemXmlApplicationContext:从文件系统中(指定的路径下)的XML文件载入上下文定义信息。
ApplicationContext applicationContext1 = 
                new FileSystemXmlApplicationContext("F:\\workspaces\\...\\applicationContext.xml");

区别

  BeanFactroy采用延迟加载形式注入Bean;ApplicationContext采用预加载形式注入Bean。后者常用。

依赖注入

  依赖注入,英文缩写为DI,全称是Dependency Injection,它与控制反转的含义相同,只不过这两个称呼是从两个角度描述的同一概念。可以这样理解DI的概念:如果一个对象A需要使用另一个对象B才能实现某个功能,这时就可以说A对象依赖于B对象,而Spring容器在创建A对象时,会自动将A对象依赖的B对象注入到A对象中,此过程就是依赖注入。 
  依赖注入常用的方式是setter方法注入,示例代码如下:

  • applicationContext.xml
<bean id="hello" class="cn.jujianfei.project.Hello">
    <property name="greeter" ref="greeter"></property>
</bean>

<bean id="greeter" class="cn.jujianfei.project.Greeter"></bean>
  • Hello类
private Greeter greeter;
public void setGreeter(Greeter greeter){
    this.greeter = greeter;
}
实例
  • 创建一个maven项目
  • 引入Spring依赖
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.0.7.RELEASE</version>
</dependency>
  • 创建Hello类
public class Hello{
    public void test(){
        System.out.println("Hello Spring!");
    }
}
  • applicationContext.xml
<bean id="hello" class="cn.jujianfei.project.Hello"></bean>
  • 创建test类
@Test
public void test(){
    ApplicationContext applicationContext = 
                        new ClassPathXmlApplicationContext("applicationContext.xml");
    HelloWorld helloWorld =(HelloWorld)applicationContext.getBean("hello");
    helloWorld.test();
}



参考资料: https://blog.csdn.net/lj1314ailj/article/details/80118372

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值