乐趣区

关于spring:Java-框架领域佼佼者-Spring-初识篇

Spring 简介

Spring 是一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创立的,长年雄踞于企业开发必选框架之首。Spring 的外围是管制反转(IoC)和面向切面编程(AOP)。简略来说,Spring 是一个分层的 Java EE 一站式轻量级开源框架。

Spring 的次要作用就是为代码 解耦,升高代码间的耦合度。

在一个零碎中,依据性能的不同,代码分为 主业务逻辑 零碎级业务逻辑 两类。它们各自具备显明的特点:主业务代码间逻辑联系严密,有具体的业余业务利用场景,复用性绝对较低;零碎级业务绝对性能独立,没有具体的业余业务利用场景,次要是为主业务提供零碎级服务,如日志、平安、事务等,复用性强。

Spring 依据代码的性能特点,将升高耦合度的形式分为了以下两类。

  • IoC:使得主业务在互相调用过程中,不必再本人保护关系了,即不必再本人创立要应用的对象了,而是由 Spring 容器对立治理,实现主动 注入
  • AOP:使得零碎级服务失去了最大复用,且不必再手工将零碎级服务混淆到主业务逻辑中了,而是由 Spring 容器对立实现 织入

Spring 体系结构

Spring 由 20 多个模块组成,它们能够分为数据拜访 / 集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、应用服务器设施治理(Instrumentation)、音讯发送(Messaging)、外围容器(Core Container)和测试(Test)。

Spring 的特点

非侵入式

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

容器

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

管制反转(IoC)

管制反转(Inversion of Control),即创立被调用者的实例不是由调用者实现,而是由 Spring 容器实现,并注入调用者。一个对象依赖的其它对象会通过被动的形式传递进来,而不是这个对象本人创立或者查找依赖对象。即,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象申请就被动将依赖传递给它。

面向切面编程(AOP)

面向切面编程(Aspect Orient Programming),是一种编程思维,是面向对象编程 OOP 的补充。容许通过拆散利用的业务逻辑与零碎级服务(例如日志和事务管理)进行开发。开发者只有专一实现业务逻辑,并不需要负责其它的零碎级关注点,例如日志或事务反对。

Spring 外围 IoC

管制反转的外围性能在于通过将程序代码获取对象调用权,来实现对象的拆卸和治理。管制反转就是对对象控制权的转移,从程序代码自身反转到了内部容器。

以后比拟风行的实现形式有两种:依赖注入和依赖查找,依赖注入形式利用更为宽泛。

  • 依赖查找(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.or… 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();
}
}

本文发于:https://antoniopeng.com

退出移动版