核心功能
IOC
IOC(Inversion of Control): 控制反转,把对象的创建,赋值,管理工作都交给代码之外的容器(服务器软件、框架spring)实现
控制: 创建对象,对象的属性赋值,对象之间的关系管理
正转: 开发人员再代码中,使用new构造方法创建对象,开发人员主动管理对象
反转: 把原来开发人员管理,创建对象的权限转移给代码之外的容器实现。由容器代替开发人员管理对象。创建对象,给对象赋值
使用IOC的目的: 解耦合,减少对代码的改动,也能实现不同的功能
Ioc的技术实现: DI(Dependency Injection):依赖注入,只需要程序中提供要使用的对象名称就可以
Spring在底层创建对象,使用的是反射机制
例子
第一步: 初学就用maven创建quickstart模板
创建个资源目录,并给项目添加spring框架支持
IDEA添加框架支持实在项目上右键Add ……
第二步: 加入maven的依赖
去https://mvnrepository.com/
找依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
第三步: 创建类(接口和他的实现类)
接口
public interface Hi {
public void sayHi();
}
实现类:
public class SayHi implements Hi{
@Override
public void sayHi(){
System.out.println("Hi");
}
}
第四步: 创建spring需要使用的配置文件,声明类的信息,这些类由spring创建和管理
用<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标签创建对象,一个标签一个对象
id:对象的自定义名称,spring通过id找到这个对象
class:类的权限名名称(不能是接口,因为spring是反射机制,必须使用类)
spring把创建好的对象放到map中,spring框架有一个map存放对象<id值,对象>-->
<bean id="Hi" class="org.example.SayHi"></bean>
</beans>
**第五步:**从容器中获取对象
对象的默认创建时间是在容器对象创建的时候被创建
//使用spring容器创建的对象
//1、指定spring配置文件的名称
String config="spring.xml";
//2、创建表示spring容器的对象,ApplicationContext
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(config);
//3、通过容器获取对象
Hi hi = (Hi) context.getBean("Hi");
hi.sayHi();