- 一、Spring概述
- 1. Spring是什么?
- 2. IOC控制反转
- 二、Spring的第一个程序
- 1. 创建Maven项目
- 2. 加入maven依赖pom.xml
- 3. 定义接口和实体类
- 4. 创建Spring的配置文件
- 5. 定义测试类
- 6. 使用spring创建非自定义类对象
- 7. 获取spring容器中java对象的信息
- 三、使用Spring框架的步骤
- 四、总结
- 1. 什么是spring
- 2. 怎么使用spring
- 3. 什么样的对象放入容器中
- 4. 不放入spring容器中的对象
一、Spring概述
1. Spring是什么?
Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明。即在 Spring 中说明对象(模块)的关系
Spring 根据代码的功能特点,使用 IOC 降低业务对象之间耦合度。IOC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring容器统一管理,自动“注入”,注入即赋值。 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”
spring全家桶:
spring , springmvc ,spring boot , spring cloud
spring: 出现是在2002左右,解决企业开发的难度。减轻对项目模块之间的管理,类和类之间的管理, 帮助开发人员创建对象,管理对象之间的关系。
spring核心技术 ioc(控制反转) , aop(面向切面编程) 。能实现模块之间,类之间的解耦合。
2. IOC控制反转
控制反转(IOC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理,控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。
通过容器实现对象的创建,属性赋值,依赖的管理。
IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入
依赖:classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA对 classB 有依赖
IOC的实现:
依赖注入:DI(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成
依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序
Spring 框架使用依赖注入(DI )实现 IOC
Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用“依赖注入”的方式来管理 Bean 之间的依赖关系。使用 IOC 实现对象之间的解耦和
二、Spring的第一个程序
1. 创建Maven项目
下面的直接下一步就可以了,具体的看之前写的关于Maven的操作
创建成功的如下:
2. 加入maven依赖pom.xml
4.0.0
com.md
01-hello-spring
1.0-SNAPSHOT
UTF-8
1.8
1.8
junit
junit
4.11
test
org.springframework
spring-context
5.2.5.RELEASE
3. 定义接口和实体类
package com.md.service;
/**
* @author MD
* @create 2020-08-07 17:32
*/
public interface SomeService {
void doSome();
}
//-----------------------------------------
package com.md.service.impl;
import com.md.service.SomeService;
/**
* @author MD
* @create 2020-08-07 17:33
*/
public class SomeServiceImpl implements SomeService {
public SomeServiceImpl() {
System.out.println("我是SomeServiceImpl的无参构造方法");
}
@Override
public void doSome() {
System.out.println("执行了SomeServiceImpl的doSome()方法");
}
}
4. 创建Spring的配置文件
在src/main/resources目录下创建xml文件,具体如下:文件名可以随意,但 Spring 建议的名称为applicationContext.xml
具体的解释看代码中的注释
- spring在创建对象的时候,声明bean,就是告诉spring要创建某个类的对象
- id: 这个对象自定义名称,唯一,spring通过这个id能找到对象
- class:类的全限定名称(不能是接口的,因为spring是反射机制创造对象的)
5. 定义测试类
spring默认创建对象的时间:在创建spring的容器时,就创建配置文件中的<所有对象>
spring创建对象,默认调用的是无参的构造方法
@Test
public void test02(){
// 使用spring容器创建对象,spring配置文件在类路径下
// 1. 指定spring配置文件名称
String config = "beans.xml";
//2. 表示创建spring容器的对象, ApplicationContext
// ApplicationContext就是表示Spring容器,通过容器获取对象了
// ClassPathXmlApplicationContext:表示从类路径中加载spring的配置文件,
// 如图所示,得把beans.xml放到编译好的target下面的classes中
// 若自动放的话这里就不用放了,如果出现找不到这个文件的时候手动放就行了
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
System.out.println("------------------");
//3. 从容器中获取某个对象, 你要调用对象的方法
//getBean("配置文件中的bean的id值")
SomeService someService = (SomeService) ac.getBean("someService");
// 4. 使用spring创建好的对象来调用方法
someService.doSome();
// 我是SomeServiceImpl的无参构造方法
// ------------------
// 执行了SomeServiceImpl的doSome()方法
}
当运行报错找不到beans.xml文件的时候,手动复制一个就可以了
6. 使用spring创建非自定义类对象
在Spring的配置文件beans.xml中添加
在测试类
/**
* 获取一个非自定义的类的对象
*/
@Test
public void test04(){
String config = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
// 获取对象
Date d = (Date) ac.getBean("mydate");
System.out.println(d);
}
7. 获取spring容器中java对象的信息
@Test
public void test03(){
String config = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
// 使用spring提供的方法,获取容器中定义的对象的数量
int count = ac.getBeanDefinitionCount();
System.out.println(count);
// 容器中定义的每个对象的名称
String[] names = ac.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
三、使用Spring框架的步骤
- 加入依赖
org.springframework
spring-context
5.2.5.RELEASE
- 创建类:接口、实现类、或者没有接口的类
- 创建spring的配置文件,使用
标签声明对象
- 我们使用容器中的对象,通过ApplicationContext接口和它的实现类ClassPathXmlApplicationContext的方法getBean("要使用的id")
四、总结
1. 什么是spring
- 是一个框架,核心技术是ioc、aop,实现解耦合
- spring是一个容器,容器中存放的是java对象,需要做的是把对象放入到容器中
2. 怎么使用spring
- spring是一个容器,把项目中用的对象放入到容器中
- 让容器完成对象的创建、对象之间的关系的管理也就是属性的赋值
- 我们在程序中从容器中获取到想使用的对象
3. 什么样的对象放入容器中
- dao类、service类、controller类、工具类
spring中对象默认都是单例,在容器中这个对象只有一个
4. 不放入spring容器中的对象
- 实体类对象,实体类的数据是来自数据库的
- servlet、listener、filter等(这几个是来自Tomcat的)