一、Spring框架
1、Spring简介
(1)狭义的Spring
狭义的Spring指Spring框架(Spring Framework)。Spring框架是为了解决企业应用开发的复杂性而创建的一个分层的,面向切面与Java应用的一站式轻量级开源框架。
Spring框架的核心是控制反转(IOC)和面向切面(AOP)。
Spring框架的优势是分层架构,分层架构允许使用者选择使用哪一个组件,同时为JavaEE应用程序提供集成的框架。
(2)广义的Spring
广义的Spring是指以Spring框架为核心的Spring技术栈。包括Spring Data、Spring Boot、Spring Cloud等。
SpringBoot
- 一个快速开发的脚手架
- 基于SpringBoot可以快速的开发单个微服务
- 约定大于配置
SpringCloud
- SpringCloud是基于SpringBoot实现的
2、Spring优点
- Spring是一个开源免费的框架
- Spring是一个轻量级的、非入侵式的框架
- 控制反转(IOC),面向切面编程(AOP)
- 支持事务处理,对框架整合的支持
- 松耦合,组件(Bean)之间依赖很松,模块可以轻松替换
3、Spring框架组成
Spring框架大概由20来个模块组成。这些模块可以分成几个大的层次:核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具和测试等。
在Spring框架中的核心组件只有三个:Core、Context和Bean。它们构建起了整个Spring的骨骼架构,没有它们就不可能有AOP、Web等特性功能
4、IoC容器
Spring通过IoC容器来管理所有Java对象(也称bean)及其相互间的依赖关系。该容器的工作范围包括对应用程序的对象进行实例化、初始化、装配以及在对象的整个生命周期中提供其他的Spring功能。
Bean:由Spring容器进行管理的对象。Spring容器先获取应用程序中编写的类并与配置元数据结合在一起,然后创建和装配Bean。在Spring中,Bean就是普通的Java类,由Spring IoC容器实例化、组装、管理。
(1)依赖注入(DI)和控制反转(IoC)
为了解决Java程序规模过大时,类之间耦合太紧密的问题,Spring框架就把创建类的行为从类中拿出来放到Spring框架里去做。
控制反转(Inversion of Control / IoC):本来由类控制其所依赖的类对象的创建,现在把创建动作放到Spring框架里了,由框架控制所有类对象的创建,这就是“控制反转”。(指new实例工作不由我们程序员来做而是交给Spring容器来做)
依赖注入(Dependency Injection / DI):框架创建了类所依赖的对象,然后把这些对象传给(注入)依赖它们的类,这就是“依赖注入”。
(2)IcO容器的主要任务
IoC容器根据XML文件、Java注释或Java config文件中的配置信息创建、装配、管理bean(普通Java类),spring应用只需声明一下所需的类(往往是父类,以便达到松耦合的目的)就可直接使用这些bean的功能。
- 创建bean实例
- 根据配置文件装配bean
- 为bean设置初始化参数
- 管理bean的生命周期
(3)Bean的配置方式
Bean装配如上图所示:配置元数据为向Spring容器提供的装配信息;Spring容器首先获取应用程序中编写的类并与配置元数据结合在一起,然后创建和装配Bean。
Bean的配置信息包含以下内容:
- 如何创建Bean
- Bean的生命周期回调方法配置
- Bean的依赖关系
Bean的配置方式有三种:
- XML配置
- 注解配置
- Java配置
5、面向切面编程
面向切面编程(Aspect Oriented Programming/AOP):AOP的主要作用是,在不修改源代码的情况下,可以给目标类打补丁,让其执行补丁中的代码。
依赖注入/DI(控制反转/IOC)与 面向切面编程/AOP都是基于Java的反射机制。
二、开发环境搭建
1、安装eclipse
2、安装Spring Tool Suite(STS)
在基于Eclipse的基础上,spring提供了针对Spring开发的Spring Tool Suite(STS)集成开发工具,通过该工具,可以很轻易地生成一个spring的工程,比如web工程,工程里的配置文件都会自动为你生成。
打开安装好的eclipse,点击菜单栏Help ,Eclipse Marketplace…打开Eclipse市场,搜索“spring tools”,找到Spring tools 4安装。
点击confirm
三、创建一个Spring应用
1、打开Eclipse
File-New-Maven Project
创建之后工程的目录结构如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.herry.demo</groupId>
<artifactId>Spring-helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
</dependencies>
</project>
2、添加spring依赖库
修改pom.xml文件,引入spring-core、spring-beans、spring-context三个模块。
3、添加代码
(1)在工程下添加名为com.herry.demo的包
(2)创建Bean类
创建位置如图所示:
Customer.java的代码如下:
package com.herry.demo;
public class Customer {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void displayInfo() {
System.out.println("Hello: "+ name);
}
}
(3)添加Bean的xml装配文件
application.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" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="customerBean" class="com.herry.demo.Customer">
<property name="name" value="herry"></property>
</bean>
</beans>
<bean>为指定的类定义bean
<property>用于类属性设置,设置的属性值将由IoC容器赋值给类实例。
(4)创建主类
package com.herry.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Hello
{
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
Customer customerBean = (Customer) context.getBean("customerBean");
customerBean.displayInfo();
((ClassPathXmlApplicationContext) context).close();
}
}
(4)编译运行
选择Hello.jaba ,右击-run as-Java application