spring笔记(1)——Spring介绍和helloWorld

在本系列笔记之前,已经看过极客学院上所有的免费版spring教程视频,极客学院上的视频短,但实在不够系统性,学习过程显得十分的零碎,因此效果是不太好的,这也是重新学习的重要原因。

Spring的简介

spring是一款诞生于2003年的轻量级开源框架,其诞生之初是为了解决企业级应用开发的复杂性,它的主要优势之一就是分层架构,分层设计架构允许开发者选择性使用组件。Spring的核心是控制反转(IOC)和面向切面(AOP)。

使用Spring的好处
  • 方便解耦,简化开发
    通过Spring提供的IOC容器,可以将对象之间的依赖关系交由Spring来管理,避免硬编码导致的程序之间过度的耦合,开发者无需再为单例模式类、属性文件解析等这些底层的需求所累,从而集中精力于业务逻辑。
  • AOP编程的支持
    Spring提供了AOP功能的支持,方便用户实现面向切面的编程
  • 声明式事务的实现
    开发者无需再为事务的管理浪费大量的精力。仅仅通过配置文件,即可完成对事务的管理,无需手动硬编码。
  • 方便程序的测试
    可以使用非容器依赖的编程方式进行几乎所有的测试工作,例如,spring对Junit的支持使得开发者可以使用注解即轻松的完后测试。
  • 方便集成各种开源框架
    Spring非但不排斥各种优秀的开源框架,其内部还直接提供了对它们的支持,例如Struts、Hibernate、Mybatis等等。

Spring的结构

Spring框架由多达1400多个类组成,但笼统地来说,其框架可以按功能分为5个主要模块:
Spring 官方文档给出的架构图
以上是Spring官方给出的体系架构图
其中AOP、Aspects、Instrumentation、Messaging可以笼统地算作AOP模块。Core容器中则包含了实现IOC所需的模块,IOC和AOP是Spring框架的根本所在,在此基础上,Spring整合了大量优秀的企业应用开源框架以及第三方类库。Spring的独到之处在于:开发者拥有极大的自主权,在针对不同领域的业务需求上,Spring往往提供了多个可供实现的方案。

  • IoC
    Spring核心模块实现了IoC的功能,它将类与类之间的依赖从代码中剥离出来,转而以配置文件的方式来描述对象之间的依赖关系,由IoC容器来管理依赖类之间的创建、拼接、管理、获取等工作,BeanFactory是Spring框架的核心接口,实现了其众多的核心功能。
    Context模块构建于核心模块之上,扩展了BeanFactory的功能,添加了i18n国际化、Bean生命周期控制、框架事件体系、资源加载透明化等等诸多功能。
    表达式语言是(EL)一个扩展的一个扩展,用于管理和查询运行期对象,支持获取和设置对象属性,调用对象方法,操作数组、集合等。还提供逻辑运算、变量定义等功能。
  • AOP
    AOP是OOP以来,影响最大的一项编程设计思想。Spring提供了满足AOP Alliance规范的实现,此外还整合了AspectJ这种语言级的AOP框架。
  • 数据访问与集成
    任何应用程序的核心问题都是对数据的访问和操作。数据由许多表现形式,如数据表、XML、消息等,而每种数据形式可以有不同的访问技术(如数据表的访问,可以直接使用JDBC,也可以借助Hibernate、Mybatis等框架)。
    Spring站在DAO的抽象层面,建立了一套面向DAO层统一的异常体系,同时将各种数据访问时的检查时异常转换为非检查时异常,为整合各种持久层框架提供基础。其次Spring通过模块化技术,对各种数据访问技术进行了薄层封装,将模式化的代码隐藏起来,使数据访问的代码极大简化。这样,Spring就建立起了和数据形式及访问技术无关的统一的DAO,借助AOP技术的实现,Spring提供了声明式事务的管理。
  • Web
    该模块建立在ApplicationContext之上,提供了Web应用的各种工具类,如通过Listener或Servlet初始化Spring容器,将Spring容器注册到Web容器中。其次,该模块还提供了很多面向Web的功能,如透明化文件上传,Velocity、FreeMarker、XSLT的支持。此外,Spring可以整合Struts、WebWork、Tapestry Web等MVC框架。
    Spring提供了一个类似于Struts的MVC框架,成为Spring MVC。据说,Spring之所以也提供一个MVC框架,是因为Rod Johnson想证明实现MVC其实很简单。当然不用Spring MVC也是可以的。

实例 hello world

Spring相关依赖,依然借助maven

<!-- 日志配置 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.9.0</version>
    </dependency>
<!-- Spring核心包 -->
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring.version}</version>
    </dependency>

配置文件
其命名没有明确规则,我命名为applicationContext,如下

<?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 name="user" class="edu.tj.entity.User"></bean>
</beans>

下面测试:

public class Test {
    @org.junit.Test
    public void test(){
        //1. 创建容器对象
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.容器实例化对象
        User u= (User) ctx.getBean("user");
        //3.打印hello world
        u.sayHello();
    }

hello world

完成。
//TO BE CONTINUED

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值