Spring概述
Spring框架介绍
Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架。
主要作用:为代码“解耦”,降低代码间的耦合度。(让对象和对象(模块与模块)之间关系不是使用代码关联,而是通过配置来说明。)
Spring 根据代码的功能特点,使用 Ioc 降低业务对象之间耦合度。IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring容器统一管理,自动“注入”,注入即赋值。 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。
Spring优点
Spring 是一个框架,是一个半成品的软件。有 20 个模块组成。它是一个容器管理对象,容器是装东西的,Spring 容器不装文本,数字。装的是对象。Spring 是存储对象的容器。
主要优点:
- 轻量:
- Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。Spring 核心功能的所需的 jar 总共在 3M 左右。
- Spring 框架运行占用的资源少,运行效率高。不依赖其他 jar
- 针对接口编程,解耦合
- Spring 提供了 Ioc 控制反转,由容器管理对象,对象的依赖关系。原来在程序代码中的对象创建方式,现在由容器完成。对象之间的依赖解耦合。
- AOP 编程的支持
- 通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付
- 在 Spring 中,开发人员可以从繁杂的事务管理代码中解脱出来,通过声明式方式灵活地
进行事务的管理,提高开发效率和质量。
- 方便集成各种优秀框架
- Spring 不排斥各种优秀的开源框架,相反 Spring 可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如 Struts,Hibernate、MyBatis)等的直接支持。简化框架的使用。Spring 像插线板一样,其他框架是插头,可以容易的组合到一起。需要使用哪个框架,就把这个插头放入插线板。不需要可以轻易的移除。
Spring体系结构
Spring 由 20 多个模块组成,它们可以分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、提供JVM的代理(Instrumentation)、消息发送(Messaging)、核心容器(Core Container)和测试(Test)。
Spring的第一个程序
环境准备
- 开发工具:idea2019 以上
- 依赖管理:maven3 以上
- jdk:1.8 以上
使用步骤
-
在pom.xml文件中导入spring依赖:(spring版本5以上的大同小异)
<!-- spring框架依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency>
-
创建一个applicationContext.xml文件(spring配置文件)
- 在maven项目中的src/main/resources目录下创建xml,命名随意,但是推荐使用applicationContext.xml
<?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 />:用于定义一个实例对象。一个实例对应一个 bean 元素。
id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依
赖关系也是通过 id 属性关联的。
class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。
scope属性:
值:prototype ==> 是指非单例模式,不共享一个对象
singleton ==> 默认就是单例模式,无论获取多少次,都是这一个对象
这里完成了 SomeService someService = new SomeServiceImpl();
创建好的对象是放在map中,用于保存随时使用,
springMap.put(id的值, 对象):例如下面bean代码就是完成了(springMap.put("someService", new SomeServiceImpl()))
一个bean标签声明一个类的对象
-->
<bean id="someService" class="com.maj.service.impl.SomeServiceImpl"/>
<bean id="someService2" class="com.maj.service.impl.SomeServiceImpl" scope="prototype" />
</beans>
-
自己创建一个类和接口(这里就略过了)
-
测试类
/* spring 默认创建对象是调用无参的构造方法 */ @Test public void test02(){ // spring配置文件在类路径下(classepath) String config = "applicationContext.xml"; // 创建spring容器对象(同时这里也是容器中所有对象的装配) ApplicationContext ac = new ClassPathXmlApplicationContext(config); // 从spring容器中获取对象,通过bean的id SomeService service = (SomeService) ac.getBean("someService"); System.out.println(service); // 拿到对象后就可以使用对象了 service.doSome(); }
补充:
// 获取容器中的对象有多少个 int count = ac.getBeanDefinitionCount(); System.out.println("容器中对象的个数:" + count); // 获取容器中所有对象的名称 String[] name = ac.getBeanDefinitionNames(); System.out.println(Arrays.toString(name)); --------------------------------------------- 容器中对象的个数:2 [someService, someService2]