一站式轻量级框架 Spring

Spring 简介

Spring 是一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而建立的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。简单来讲,Spring 是一个分层的 Java EE 一站式轻量级开源框架。java

Spring 的主要做用就是为代码 解耦,下降代码间的耦合度。spring

在一个系统中,根据功能的不一样,代码分为 主业务逻辑系统级业务逻辑 两类。它们各自具备鲜明的特色:主业务代码间逻辑联系紧密,有具体的专业业务应用场景,复用性相对较低;系统级业务相对功能独立,没有具体的专业业务应用场景,主要是为主业务提供系统级服务,如日志、安全、事务等,复用性强。编程

Spring 根据代码的功能特色,将下降耦合度的方式分为了如下两类。安全

  • IoC:使得主业务在相互调用过程当中,不用再本身维护关系了,即不用再本身建立要使用的对象了,而是由 Spring 容器统一管理,实现自动 注入
  • AOP:使得系统级服务获得了最大复用,且不用再手工将系统级服务混杂到主业务逻辑中了,而是由 Spring 容器统一完成 织入

Spring 体系结构

Spring 由 20 多个模块组成,它们能够分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、应用服务器设备管理(Instrumentation)、消息发送(Messaging)、核心容器(Core Container)和测试(Test)。服务器

file

Spring 的特色

非侵入式

所谓非侵入式是指,Spring 框架的 API 不会在业务逻辑上出现,即业务逻辑是 POJO。因为业务逻辑中没有 Spring 的 API,因此业务逻辑能够从 Spring 框架快速的移植到其余框架, 即与环境无关。app

容器

Spring 做为一个容器,能够管理对象的生命周期、对象与对象之间的依赖关系。能够经过配置文件,来定义对象,以及设置与其余对象的依赖关系。框架

控制反转(IoC)

控制反转(Inversion of Control),即建立被调用者的实例不是由调用者完成,而是由 Spring 容器完成,并注入调用者。一个对象依赖的其它对象会经过被动的方式传递进来,而不是这个对象本身建立或者查找依赖对象。即,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。测试

面向切面编程(AOP)

面向切面编程(Aspect Orient Programming),是一种编程思想,是面向对象编程 OOP 的补充。容许经过分离应用的业务逻辑与系统级服务(例如日志和事务管理)进行开发。开发者只要专一实现业务逻辑,并不须要负责其它的系统级关注点,例如日志或事务支持。编码

Spring 核心 IoC

控制反转的核心功能在于经过将程序代码获取对象调用权,来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码自己反转到了外部容器。spa

当前比较流行的实现方式有两种: 依赖注入和依赖查找,依赖注入方式应用更为普遍。

  • 依赖查找(DL):Dependency Lookup,容器提供回调接口和上下文环境给组件,程序代码则须要提供具体的查找方式。
  • 依赖注入(DI):Dependency Injection,指程序运行过程当中,若须要调用另外一个对象协助时,无须在代码中建立被调用者,而是依赖于外部容器,由外部容器建立后传递给程序。

依赖注入是目前最优秀的解耦方式。依赖注入让 Spring 的 Bean 之间以配置文件的方式组织在一块儿,而不是以硬编码的方式耦合在一块儿的。

第一个 Spring 程序

引入依赖

pom.xml 中引入 Spring 核心依赖 org.springframework:spring-context

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.15.RELEASE</version>
</dependency>

业务代码

建立 HiSpringService 业务接口

public interface HelloSpringService {
    public void helloSpring();
}

建立实现类

public class HelloSpringService implements HelloSpringServiceImpl {
    public void helloSpring() {
        System.out.println("Hello Spring");
    }
}

相关配置

src/main/resources 目录下建立 spring-context.xml 配置文件,从如今开始类的实例化工做交给 Spring 容器管理(IoC),配置文件以下:

<?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="helloSpringService" class="com.antoniopeng.hello.spring.service.impl.HelloSpringServiceImpl" />
</beans>
  • bean:用于定义一个实例对象。一个实例对应一个 bean 元素。
  • id:该属性是 Bean 实例的惟一标识,程序经过 id 属性访问Bean,Bean 与 Bean 间的依赖关系也是经过 id 属性关联的。
  • class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。

使用 Spring IoC

建立一个 IoCTest 测试类,测试对象是否可以经过 Spring 来建立,代码以下:

public class IoCTest {

    public static void main(String[] args) {
        // 获取 Spring 容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
        
        // 从 Spring 容器中获取对象
        HelloSpringService helloSpringService = (HelloSpringService) applicationContext.getBean("HelloSpringService");
        HelloSpringService.helloSpring();
    }
}
相关文章
相关标签/搜索