第一章:Spring基础
Spring概述
Spring 是一个开源的Java企业级应用开发框架。是一个分层的轻量级一站式(full-stack)框架,可以叫做家族型的框架,也可以叫做Spring全家桶。
核心
IOC 控制反转(Inversion of Control ):Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象,后续创作者将描述改为DI(Dependency Injection,依赖注入)。
AOP 面向切面(AOP):面向切面的编程,把应用业务逻辑和系统服务分开。
优点
- 作为容器,Spring 包含并管理应用中对象的生命周期和配置。
- 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制
- 提供了一套MVC框架,叫SpringMVC,互联网企业主流开发框架。
- Spring 提供一个持续的事务管理接口,能非常简单的帮我们管理数据库事务。
- 支持各种开源框架,可以与第三方框架(如Hibernate、Struts、MyBatis)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
- 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)
- 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。
- Junit支持,可以使用Junit进行测试
Spring 的框架结构
Data Access/Integration层:包含有JDBC、ORM、OXM、JMS和Transactions模块。
Web:包含了WebSocket、Web、WebMVC、WebFlux模块。
AOP:模块提供了一个符合AOP联盟标准的面向切面编程的实现。
Aspects:集成自Aspects框架,主要为AOP提供多种实现
Instrument:基于JavaSE中的java.lang.instrument
进行设计,也是为AOP的实现提供支持
Messaging:提供消息协议支持
Core Container(核心容器):包含有Beans、Core、Context和Expression(SpEL)模块。
Test:支持使用JUnit和TestNG对Spring组件进行测试。
Spring官网介绍
- Spring 官网:https://spring.io/
- Spring 文档:https://spring.io/guides
- Spring IDE: https://spring.io/tools/sts
- Spring Project: https://spring.io/projects
- 项目快速生成器(SpringBoot):https://start.spring.io/
第一个Spring程序
-
新建一个空的 Java maven项目,命名为【spring01】
-
修改pom.xml文件,增加如下依赖
<properties> <spring.version>5.1.5.RELEASE</spring.version> </properties> <dependencies> <!-- bean context core expression --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</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-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
3.在【src/main/java】下新建一个【com.hliedu.pojo.Drinks】类:
package com.hliedu.pojo; /** * - 饮品POJO * * - 带你轻松学Java:恒骊学堂 * www.hliedu.com * QQ群:107184365 * */ public class Drinks { private String fruit; // 类型 private String sugar; // 糖分描述 private String size; // 大小杯 private int money; //金额 /* setter and getter */ }
4.在 【src/main/resources】 目录下新建一个 【applicationContext.xml】 文件,通过 xml 文件配置的方式装配我们的 bean:
<?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="drinks" class="com.hliedu.pojo.Drinks"> <property name="fruit" value="橙子"/> <property name="sugar" value="多糖"/> <property name="size" value="超大杯"/> </bean> </beans>
在 【src/test/java】下新建一个【com.hliedu.test.DrinksTest】类:
package com.hliedu.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.hliedu.pojo.Drinks; public class DrinksTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Drinks drinks = (Drinks)context.getBean("drinks"); String fruit = drinks.getFruit(); String size = drinks.getSize(); String sugar = drinks.getSugar(); System.out.println(drinks); System.out.println("果汁口味:" + fruit +",大小:" + size + ",是否加糖:" + sugar); } }
-
总结:
-
传统的方式:
通过new 关键字主动创建一个对象 -
IOC方式:
对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制 (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了Spring。