Spring 是一个开源的Java企业级应用开发框架。是一个分层的轻量级一站式(full-stack)框架,可以叫做家族型的框架,也可以叫做Spring全家桶。
IOC 控制反转(Inversion of Control ):Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象,后续创作者将描述改为DI(Dependency Injection,依赖注入)。
AOP 面向切面(AOP):面向切面的编程,把应用业务逻辑和系统服务分开。
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组件进行测试。
新建一个空的 Java maven项目,命名为【spring01】
修改pom.xml文件,增加如下依赖
<properties>
<spring.version>5.1.5.RELEASEspring.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
dependencies>
在【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 */
}
在 【src/main/resources】 目录下新建一个 【applicationContext.xml】 文件,通过 xml 文件配置的方式装配我们的 bean:
<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);
}
}
运行测试代码,可以正常拿到 xml 配置的 bean
总结:
传统的方式:
通过new 关键字主动创建一个对象
IOC方式:
对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制 (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了Spring。
思考:这种方式感觉比直接实例化麻烦很多,但为什么这种方式却作为了Spring的核心思想?